指针结构的问题

时间:2015-12-05 19:03:22

标签: c pointers

此代码运行时出现分段错误,但编译没有问题。有什么问题?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char *fld[129];
} isomsg;

void iso8583_init(isomsg *m)
{
    int i;

    for (i = 0; i <= 128; i++) {
        m->fld[i] = NULL;
    }
}


isomsg  m;

int main(int argc, char *argv[]) {

    iso8583_init(&m);

    strcpy(m.fld[0],"Fisrt");

    printf("First = %s\n",m.fld[0]);

    system("PAUSE");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

有问题的一行是:

strcpy(m.fld[0],"Fisrt");

m.fld[0]是一个初始化为NULL的指针。如果指向NULL,则无法写入该地址。这是undefined behaviour

你可能想要:

m.fld[0] = "Fisrt";

这将字符串文字的地址分配给指针m.fld[0]

或者如果您想复制字符串文字"First",那么您可以使用strdup()(POSIX):

m.fld[0] = strdup("Fisrt");

或使用malloc() + strcpy()(标准C中):

m.fld[0] = malloc( sizeof("First") ); //allocate memory of 6 bytes
strcpy(m.fld[0], "First"); 

(你应该检查strdup / malloc()是否由于失败而返回NULL。)