首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在struct中输入字符串:分段错误

在struct中输入字符串:分段错误
EN

Stack Overflow用户
提问于 2014-11-20 08:47:42
回答 5查看 539关注 0票数 2

到目前为止,我已经能够尽职尽责地回答我所有的问题,但这个问题让我很困惑。

所以。我已经将这段代码缩减到了产生错误所必需的最小值。下面是:

代码语言:javascript
复制
#include <studio.h>  

struct string {
      char *data;
} s;

int main(int argc, char *argv[])
{
    printf("Enter a string. ");
    scanf("%s\n", &s.data);
    printf("%s", s.data);

    return 0;
}

我使用gcc 4.6.3,用-Wall -g编写,使用经典的防御性编程策略。

我从手机上发了这个,所以可能会有打字和自动更正的疯狂。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-20 09:04:48

当使用scanf时,要使用unallocated pointer作为字符串读取,请指定'm'指令,强制scanf在跳过换行符时根据需要分配内存。您负责分配给字符串的freeing the memoryscanf期望提供的指针为char**类型。

代码语言:javascript
复制
scanf ("%m[^\n]%*c", &s.data);

尾随的%*c读取并丢弃尾随换行符。(如果您只按[enter]键,请注意这一点)

票数 2
EN

Stack Overflow用户

发布于 2014-11-20 08:49:49

您需要首先使用malloc分配内存。

s.data = malloc(100);

票数 0
EN

Stack Overflow用户

发布于 2014-11-20 08:51:52

它在结构中的事实并不是问题所在。问题是指针数据没有初始化,也没有要复制的东西的内存。

这解决了问题:

代码语言:javascript
复制
struct string 
{
 char data [SOMEBIGNUMBER]
} s;

这样做也是如此:保持字符串的原样,但是使用malloc在main中为数据分配空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27035212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档