[英]Storing a char in an array segfault
我的代码中出现了段错误,我不确定原因。 我读了一个文件并计算了行数,以便动态分配我的数组。 然后我回放文件,读取文件中的数据,将数据存储到变量中,然后将读取的变量存储到数组中,但是我遇到了chars问题。
...
char *aname = malloc(sizeof(char) * 3);
...
// get # lines in file (count)
...
char *aname_seen = malloc(count * (sizeof(char) * 3));
...
rewind(file);
while (fgets(buff, sizeof buff, file) != NULL)
{
if (sscanf(buff, "%s %d %s %s %d %lf %lf %lf %lf %lf\n",
atm, &serial, aname, resName, &resSeq, &x, &y, &z,
&occupancy, &tempFactor) == 10)
{
aname_seen[i] = *aname;
printf("%d: %s vs %s\n", i, aname, aname_seen[i]);
i++;
} // end sscanf if-loop
} // end while loop
我可以使用printf("%d: %s\\n", i, aname)
打印aname并获得预期的输出,但是当我尝试printf("%d: %s vs %s\\n", i, aname, aname_seen[i])
时,我遇到了Segmentation fault (core dumped)
printf("%d: %s vs %s\\n", i, aname, aname_seen[i])
。
这个while循环+嵌套if循环是我用来计算行数的相同约定,所以i
会递增计数。 我是否错误地分配aname_seen并且实际上没有给它count
char*3
元素的数量? 我不太擅长搞乱char。 更多的数字fortran buff,所以我需要一些方向。
提前致谢!
%s
格式说明符应该对应于char *
参数。 在你的例子中, aname_seen[i]
是一个char
,它被提升为一个int
,目的是传递给一个可变函数( printf
)。 int
不是char *
。
也许你的意思是其中之一:
printf("%d: %s vs %c\n", i, aname, aname_seen[i]);
printf("%d: %s vs %s\n", i, aname, &aname_seen[i]);
如果这些都没有解决您的问题,请准确解释您对此表达式的期望,并为我们提供一个最小的,可编译的测试用例。 您当前的测试用例不可编译。
你定义的方式aname_seen
是一个指向char数组的指针
char *aname_seen = malloc(count * (sizeof(char) * 3));
所以aname_seen[i]
是一个char
所以
printf("%d: %s vs %s\n", i, aname, aname_seen[i]);
应该
printf("%d: %s vs %c\n", i, aname, aname_seen[i]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.