gpt4 book ai didi

C - char* 列表 - 内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:27 25 4
gpt4 key购买 nike

我对如何正确分配内存感到困惑。我正在尝试从文本文件中创建一个 char* 列表。每次我制作一个 char* 时,我都必须为它分配内存吗?何时何地有异常(exception)?

#define BUFF 1000   

int main(int argc, char** argv)
{
FILE* file;
file = fopen(argv[1], "r");
char* word = calloc(BUFF, sizeof(char));
char* sentence = calloc(BUFF, sizeof(char));
char** list = calloc(BUFF, sizeof(char*));
int i = 0;
while((fgets(sentence, BUFF, file)) != NULL)
{
word = strtok(sentence, " ,/.");
while(word != NULL)
{
printf("%s\n", word);
strcpy(list[i], word);
i++;
word = strtok(NULL, " ,/.");
}
}
int k;
for(k = 0; k < i; k++)
{
puts("segging here");
printf("%s\n", list[i]);
}

最佳答案

规则是:你必须分配你使用的任何内存。

你的问题来了:

strcpy(list[i],  word);

list[i] 当前未指向任何分配的存储空间(它可能是一个空指针)。在将字符复制到其中之前,您必须使其指向某处。

一种方法是:

list[i] = strdup(word);

strdup 不是 ISO C 标准函数,但它相当于执行 malloc 然后 strcpy。之后您将需要释放

此外,当 i == BUFF 时,i++ 行需要停止,将 \n 添加到strtok 分隔符列表。

关于C - char* 列表 - 内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25225686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com