c - 为字符串数组分配内存

标签 c arrays string memory-management

我想使用两个函数填充一个字符串数组:第一个,如果我有n个字符串要分配,将分配n个内存空间;第二个将为每个读取的字符串分配内存

这是第一个函数:

char** allocate(int n)
{
    char** t;
    t=(char**)malloc(n*sizeof(char*));
    if(!t) exit(-1);
    return t;
}

这是第二个:

void fill(char*** t,int n)
    {
        int i;
        char* help=" ";
        for(i=0;i<n;i++)
        {
            printf("\n saisir la chaine n %d :",i+1);
                scanf("%s",help);
                *t[i]=(char*)malloc((strlen(help)+1)*sizeof(char));
                strcpy(*t[i],help);
        }
    }

我没有忘记在 main 中调用第二个,如下所示:fill(&t,n);

问题是我在读取第一个字符串后收到错误并且程序结束。

最佳答案

这一行

char* help=" ";

只是定义了一个指向""的指针。

没有分配内存来存储要通过 scanf() 扫描的数据。

如果要扫描的字符数达到上限,请按以下步骤操作:

#define SCAN_MAXIMUM (255)
#define SCAN_FMT_STRINGIFY(max) "%"#max"s"
#define SCAN_FMT(max) SCAN_FMT_STRINGIFY(max)

...

  char help[SCAN_MAXIMUM + 1]; /* Add one for the road^H^H^H^H`0`-terminator. */
  scanf(SCAN_FMT(SCAN_MAXIMUM), help);

这些行也不是您想要的:

    *t[i]=(char*)malloc((strlen(help)+1)*sizeof(char));
    strcpy(*t[i],help);

[] 运算符比 * 运算符绑定(bind)更紧密,因此这些行应该如下所示

    (*t)[i] = malloc((strlen(help) + 1));
    strcpy((*t)[i], help);

另外^2:在 C 中不需要强制转换 malloc/calloc/realloc 的结果,也不推荐这样做。


另外^3:sizeof(char) 被定义为等于1

关于c - 为字符串数组分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642374/

相关文章:

手动分配地址时,编译器优化了指向函数的指针

c - 低碳代码 : Forward Declaration of Typedef'd Enum Failing?

c - 使用递归打印出C中所有可能的字符串

ios - 代码/iOS : Simple example of a mutable C-Array as a class instance variable?

处理文件时的困惑

c - 为什么 gcc -Wformat 不对 unsigned int 上的 printf %d 发出警告?

java - 将 ArrayList 转换为数组 PayPalItem 时出错

java - 为什么有些字符串没有从 java 插入到 PostgreSQL 表中?

c++ - 动态规划中的表如何工作?

C - 结构传递值 - 段错误