出于某种原因,当我尝试运行此测试代码时,我遇到了分段错误。程序应该从文件中读取字符串并将它们放入数组中。我是C的新手,并尝试使用调试器,但我遇到了麻烦。
非常感谢任何输入。
void fillArray(char *array[], int * count, FILE * fpin){
char buf[40];
char *p;
count = 0;
while(fgets(buf, 40, fpin) != NULL){
if((p= strchr(buf, '\n')) != NULL)
*p = '\0'; //step on the '\n'
array[(*count)++] = malloc(strlen(buf)+1);
assert(array[*count]);
strcpy(array[*count], buf);
(*count)++;
}
}
答案 0 :(得分:1)
array[(*count)++] = malloc(strlen(buf)+1);
^^^
assert(array[*count]);
首先你增加然后使用数组中的下一个位置,可能是一个未初始化的指针。从该行中删除++
。
答案 1 :(得分:0)
希望这会有所帮助。该函数自动管理数组和数组条目的内存。
void fillArray(char ***array, int *count, FILE *fpin)
{
char *tmp[] = 0;
int tmp_allocated = 0;
int tmp_count = 0;
assert(array);
assert(count);
assert(fpin);
while(fgets(buf, 40, fpin) != NULL)
{
if (( p= strchr(buf, '\n')) != NULL)
{
*p = 0;
}
if (tmp_count == tmp_allocated)
{
tmp_allocated += 10;
tmp = realloc(tmp, sizeof(char*) * tmp_allocated);
assert(tmp);
}
tmp[tmp_count] = strdup(buf);
assert(tmp[tmp_count]);
tmp_count++;
}
*array = realloc(tmp, sizeof(char*) * tmp_count);
*count = tmp_count;
}
这就是我们如何使用它。
void userOfFillArray()
{
int count;
char **array;
FILE *fpin = ...;
fillArray(&array, &count, fpin);
// if count == 0, then array can be NULL
...
while (count--)
{
free(array[count]);
}
free(array);
}