C 指针结构的问题
我有一个分段错误时,这段代码运行,但它编译没有问题。怎么了C 指针结构的问题,c,pointers,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->f
#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;
}
#包括
#包括
#包括
类型定义结构{
char*fld[129];
}isomsg;
无效iso8583_初始值(isomsg*m)
{
int i;
对于(i=0;i fld[i]=NULL;
}
}
isom;
int main(int argc,char*argv[]){
iso8583_init(&m);
strcpy(m.fld[0],“first”);
printf(“First=%s\n”,m.fld[0]);
系统(“暂停”);
返回0;
}
有问题的一行是:
strcpy(m.fld[0],"Fisrt");
m.fld[0]
是一个初始化为NULL的指针。如果地址指向NULL,则无法写入地址。这是错误的
您可能想要:
m.fld[0] = "Fisrt";
这将字符串文本的地址分配给指针m.fld[0]
或者,如果您想复制字符串literal“First”
,则可以使用strdup()
(POSIX):
或者使用malloc()
+strcpy()
(标准C):
(您应该检查/malloc()
是否由于失败而返回NULL。)如果我使用:memcpy(&m.fld[0],“First”,5);@user5240895 memcpy()是另一种复制方式。但是在任何情况下,您都需要让指针指向有效的内存位置,也就是说,您仍然需要对传递给memcpy()的指针执行malloc()。
m.fld[0] = strdup("Fisrt");
m.fld[0] = malloc( sizeof("First") ); //allocate memory of 6 bytes
strcpy(m.fld[0], "First");