C-使用char数组时,fgets神秘地导致段错误

德洛瓦尔

我似乎对此问题有一些类似的问题,但是我以一种非常直接的方式询问,因此希望我能对到底发生了什么有个很好的解释。

看一下这个非常简单的程序:

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”段存在故障。到底是怎么回事?

Dlacreme

好吧,这是这里的基础。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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 C 中写入 char* 数组会引发段错误

来自分类Dev

C - 使用 pthread 共享 double 导致段错误

来自分类Dev

使用char数组的C ++ getline错误

来自分类Dev

使用char数组的C ++ getline错误

来自分类Dev

for循环会导致随机段错误C ++

来自分类Dev

c ++ memset导致int **指针的段错误

来自分类Dev

C:传递2D数组的一维会导致段错误

来自分类Dev

使用fseek时C代码出现段错误

来自分类Dev

空终止在C中的char数组以及使用read和fgets之间的区别

来自分类Dev

使用数组时 C 中的分段错误

来自分类Dev

C-字符串数组和神秘的Valgrind错误

来自分类Dev

c中的char指针导致分段错误

来自分类Dev

段 错误调整数组C ++的大小

来自分类Dev

C ++-将元素按升序插入数组时出现段错误

来自分类Dev

执行指向字符串C数组的指针时出现段错误

来自分类Dev

在C ++中初始化数组时出现段错误(项目Euler号3)

来自分类Dev

在Go中使用C库时,如何正确地将UTF-8编码的char数组转换为Go字符串?

来自分类Dev

为什么此C代码段不会导致分段错误?

来自分类Dev

c-写入共享内存段会导致分段错误

来自分类Dev

从C调用的nasm函数最终导致段错误

来自分类Dev

c函数没有被调用就重复执行,导致段错误

来自分类Dev

为什么使用char **会导致char *工作的段错误?

来自分类Dev

使用C中的指针在字符串数组中进行段错误

来自分类Dev

使用长整数的C段错误

来自分类Dev

C ++ int的价值神秘地变化

来自分类Dev

在C语言中,使用指向结构的指针来调用结构内部指向的函数会导致段错误

来自分类Dev

在 C++ 中使用 pybind11 包装器时出现段错误

来自分类Dev

fgets中的字符串后的c ++神秘字符

来自分类Dev

libuv + C ++段错误

Related 相关文章

热门标签

归档