我用C写了一个模拟的linux comand cat,但是我找不到函数内部的错误,它必须计算非空字符串。我得到:segmentation fault,当我使用这个函数时(代码如下):
void output_opt1_file(char *name_file) // функция открывает файл и нумерует только не пустые строки
{
FILE *f = fopen(name_file, "rt");
if (f != NULL) {
char *string;
fgets(string, 100, f);
int i = 1;
while (fgets(string, 100, f) != NULL) {
if (strlen(string) == 0) //if (string[0] == '\n')
{
printf("%s", string);//puts(string);
}
else
{
printf("%d%c", i, ' ');
++i;
printf("%s", string);//puts(string);
}
}
fclose(f);
}
}
字符串
我需要帮助寻找我的错误。
2条答案
按热度按时间bvk5enib1#
你的代码是错误的,至少有两个原因。
第一个原因是指针
string
未初始化。字符串
您需要声明一个字符数组而不是指针,例如
型
第二个问题是这个if语句
型
永远不会评估为逻辑true,因为函数
fgets
至少可以从文字档读取新的行字符'\n'
做为空字串。你可以写
型
while循环之前的这个调用
型
将跳过第一条记录。
请注意,一般情况下,文件中的一条记录可以大于或等于
100
个字符。例如,如果档案中的记录正好包含99
个字符加上新行字符'\n'
,则您的函数会将此记录视为两个记录:记录的新行字符将被认为是分开的第二个空记录。ql3eal8s2#
工作版本:
字符串