此代码运行时出现分段错误,但编译没有问题。有什么问题?
#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;
}
答案 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。)