gpt4 book ai didi

c - 一个 fgets 实现中出现段错误,但另一类似实现中则没有

转载 作者:行者123 更新时间:2023-11-30 18:22:08 24 4
gpt4 key购买 nike

我试图理解这个问题背后的原因;我在两个不同的程序中有两个非常相似的 fgets 实现。其中一个工作没有任何问题,另一个会导致段错误。我看到的两个程序之间的唯一区别是,有效的程序不接受任何命令行参数,而无效的程序则接受任何命令行参数。

有谁能帮我理解其中的区别吗?我知道您不能将 fgets 用于尚未为其分配内存的内容,那么为什么第一个示例可以正常工作呢?

非常感谢!

工作代码(缺少不相关部分):

int main(){
char *s;
while((fgets(s,100,stdin))){
if (evaluate_checksum(s)){
printf("%s",s);
}
}
}

不起作用的代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
int a;
int b;
int c;
int d;
sscanf(argv[1],"%d", &a);
sscanf(argv[2],"%d", &b);
sscanf(argv[3],"%d", &c);
sscanf(argv[4],"%d", &d);

char *line;
long u1;
long v1;
long u2;
long v2;

while ((fgets(line,100,stdin))){
printf("%s", line);
char *endptr = line;
u1 = strtol(line,&endptr,10);
v1 = strtol(entptr,&endptr,10);
u2 = strtol(endptr,&endptr,10);
v2 = strtol(endptr,&endptr,10);
printf("%ld, %ld, %ld, %ld",u1,v1,u2,v2);
}

}

最佳答案

两个版本都表现出未定义的行为,因为您正在将尚未获取的数据读入内存。在第一种情况下,它并不立即明显。在第二种情况下,这一点立即显而易见。试图理解他们的行为是没有结果的。

关于c - 一个 fgets 实现中出现段错误,但另一类似实现中则没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29246790/

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