如何将字符串存储到结构中声明的字符指针中

时间:2013-04-27 19:16:59

标签: c

这是我的代码:

 #include<stdio.h>



    struct p{

           char* d;
           };

    typedef struct p* pt;

    int main(){
        pt opt;
        opt=(pt)malloc(sizeof(struct p));

        scanf("%s",(opt->d));


        printf("%s",opt->d);



        getch();

        return 0;

        }

每次我运行它,它接受并打印字符串罚款但发生错误。 在调试时,它告诉我有一个分段错误但是没有指向它的位置? 出了什么问题,这似乎是相当正确的。

5 个答案:

答案 0 :(得分:2)

您使用malloc为您的结构分配空间,但不是为您想要读入的字符串分配空间。您也需要这样做。以下是您的问题中的一个示例:

 pt opt = malloc(sizeof(struct p));
 opt->d = malloc(MAX_STRING_LENGTH);

答案 1 :(得分:2)

Yupp,问题是您必须为char * d;

分配内存

1)为char * d分配内存(在上面的回复中提到)
opt->d = malloc(expected_max_len + 1);

2)或者您可以在结构中声明具有最大缓冲区长度的缓冲区:
char d[MAX_LENGTH];

答案 2 :(得分:1)

scanf将扫描的字符串放入char缓冲区。但是在你的代码中,你的char指针并没有指向应该指向缓冲区的任何东西

如果你的gcc&gt; 2.7,你可以使用"%ms"。这将允许scanf为指针分配内存

scanf("%ms",(opt->d));

答案 3 :(得分:0)

您必须为char* d;

分配内存
int main(){
    pt opt;
    opt=(pt)malloc(sizeof(struct p));
    opt->d = malloc( sizeof( char )* 80);
    scanf("%s",(opt->d));    //this might overflow

答案 4 :(得分:0)

您需要将正确的缓冲区传递给scanf,而不仅仅是指向某处指针。

struct p{
   char* d;
};

typedef struct p* pt;

int main(){
    pt opt;
    opt=(pt)malloc(sizeof(struct p));

    opt->d = malloc(expected_max_len + 1);

    scanf("%s",(opt->d));


    printf("%s",opt->d);

    free(opt->d);


    getch();

    return 0;

}