`分段错误错误发生在第二次迭代的 while 循环的第 16 行。 似乎在第 19 行之后发生了一些我不知道的事情。 有问题的文件以 255,255,255,255,255 开头...很长一段时间后,它在值 255 和 0 之间来回切换。我不需要打印它们,而是需要将它们放入函数中,但我自己可以做到这一点
(我不熟悉任何术语,也不知道如何解决它,因为我是 c 的初学者)`
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
char a[40];
char destination[40];
char c;
char * ptr;
FILE *file;
if ((file = fopen("file_rgb.txt", "r")) == NULL){
printf("unable to open file");
return 1;
}
while ((c = getc(file)) != EOF){
if (&c == ",")
continue;
char * source = &c;
strcpy(destination, source);
ptr = strcat(a ,destination);
printf("%s", a); //after this I need to empty the string for the next rgb value which has not been yet accomplished.
}
if (fclose(tetkabetka) == EOF){
printf("unable to close file");
return 1;
}
return 0;
}
编译器显示了这个奇怪的退出代码,但它没有打印出任何内容。 当我删除“c”变量之前的“&”符号时,编译器会产生这些错误。
test.c: In function 'main':
test.c:17:15: warning: comparison between pointer and integer
17 | if (c == ",")
| ^~
test.c:19:25: warning: initialization of 'char *' from 'char' makes pointer from integer without a cast [-Wint-conversion]
19 | char * source = c;
| ^
[Done] exited with code=3221225477 in 0.254 seconds
我不明白为什么它将 c 变成指针(以我有限的专业知识,因为我是菜鸟) 非常感谢您的解释。
您似乎对 C 中的字符串有一些基本的误解。C 中的字符串是由空字节终止的 char 数组 (
'\0'
)。如果这样的 char 数组不是以空字节终止,则将其视为字符串会导致未定义的行为。
由于您的变量
c
只是单个字符而不是字符数组,因此可以将其视为字符串的唯一方法是使其成为0
本身。
if (&c == ",") continue;
应该是变量本身与
','
的比较。
if (c == ',')
continue;
并且您不应该将指向
c
的指针视为可以传递给 strcpy
的字符串。
其他问题:
strcat
与 a
一起使用,但 a
尚未初始化。 char a[40] = {0};
a
只能包含 40 个字符,但你永远不会检查你是否没有超出此缓冲区。