【发布时间】:2014-10-03 05:50:06
【问题描述】:
我对如何正确分配内存感到困惑。我正在尝试从文本文件中列出 char*。每次我制作一个 char* 时,我都必须为它分配内存吗?何时何地有例外情况?
#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]);
}
【问题讨论】:
-
这是#define BUFF 1000 抱歉
-
一个建议:调用
BUFF类似BUFFER_SIZE以使其含义更明确。 -
或 BUFLEN 以保持简洁。但是,在所有这些情况下使用相同的常量并不是一个好主意……BUFLEN、WORDLEN、SENTENCELEN、MAXWORDS 都是不同的概念。如果你要使用固定大小的数组,你应该尽量不要溢出它们。