我似乎对此问题有一些类似的问题,但是我以一种非常直接的方式询问,因此希望我能对到底发生了什么有个很好的解释。
看一下这个非常简单的程序:
int main()
{
char* a;
a[200];
fgets(a, 200, stdin);
char* b;
b[200];
fgets(b, 200, stdin); // Seg fault occurs once I press enter
return 0;
};
如您所见,“ a”部分运行正常。但是,“ b”段存在故障。到底是怎么回事?
好吧,这是这里的基础。segfault意味着您正在使用您无权访问的内存。
int main()
{
char* a; // Create a pointer (a pointer can only contains an address (int size)
a[200]; // Trying to access to the byt 200 of your pointer but basicaly do nothing. You are suppose to have a segfault here
fgets(a, 200, stdin); // store your stdin into &a (you may have a segfault here too)
return 0;
};
取决于很多事情,有时可能会失败,有时不会失败。但是您在这里做错了。您必须设法解决此问题。首先使用一个简单的数组char
#include <stdio.h> /* for stdin */
#include <stdlib.h> /* for malloc(3) */
#include <string.h> /* for strlen(3) */
#include <unistd.h> /* for write(2) */
int main()
{
char str[200];
fgets(str, sizeof str, stdin);
write(1, str, strlen(str)); /* you can receive less than the 200 chars */
return (0);
}
或者,如果您想继续使用指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
const size_t sz = 200;
char* str;
str = malloc(sz);
fgets(str, sz, stdin);
write(1, str, strlen(str));
}
但是无论如何,您的错误是由于对C语言中的指针和内存缺乏了解导致的。
祝你好运
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句