我得到了这段代码:
void scanLinesforArray(FILE* file, char search[], int* lineNr){
char line[1024];
int line_count = 0;
while(fgets(line, sizeof(line),file) !=NULL){
++line_count;
printf("%d",line_count);
printf(line);
char *temp = malloc(strlen(line));
// strncpy(temp,line,sizeof(line));
// printf("%s\n",temp);
free(temp);
continue;
}
}
这将打印文件的所有行,但只要我取消对strncpy()的注解,程序就会停止,没有错误。
当我使用strstr()将该行与我的搜索变量进行比较时,同样的情况也会发生。
我尝试了continue语句和其他多余的东西,但没有任何帮助。
1条答案
按热度按时间bybem2ql1#
很多问题:
不将常规字符串打印为格式
如果字符串包含
%
,则代码会有未定义行为的风险。错误的大小
strncpy(temp,line,sizeof(line));
与strncpy(temp,line, 1024);
类似,但temp
指向的分配字节数小于1024。代码尝试在分配的内存之外写入。未定义的行为(UB)。代码很少使用
strncpy()
。错误的说明符
%s
需要匹配 * 字符串 *。temp
未指向 * 字符串 *,因为它缺少 * 空字符 *。而是为'\0'
分配。无比较
“无法比较C中文件的行”很奇怪,因为没有比较代码。
回想一下,
fgets()
通常会在line[]
中保留一个'\n'
。也许吧
高级:示例性能更好的代码。