所以,我编写了这个程序,它接收一个由姓氏和名字组成的字符串作为输入,如下所示:“james:lebron”。该程序应该在结构的姓氏变量中复制姓氏,同样适用于名称。没有编译错误,只是核心转储错误。有人可以解释一下为什么吗?
#include <stdio.h>
#include <string.h>
struct author{
char *name;
char *surname;
};
typedef struct author author_t;
author_t separate(char *string);
int main(void){
char *name_surname;
printf("Inserisci nome e cognome: ");
gets(name_surname);
separate(name_surname);
}
author_t separate(char *string){
int i, n=0;
author_t temp;
for(i=0; i<(strlen(string)-1); i++){
while(string[i]!=':')
n++;
strncpy(temp.surname, string, n);
strncpy(temp.name, &string[n+2], (strlen(string)-n-2));
}
return(temp);
}
答案 0 :(得分:0)
关闭我的头顶我说增加n并不是一个好主意,因为我要复制的项目数量不是字符串中的位置。
答案 1 :(得分:0)
struct author{
char *name;
char *surname;
};
....
int i, n=0;
author_t temp;
for(i=0; i<(strlen(string)-1); i++){
while(string[i]!=':')
n++;
strncpy(temp.surname, string, n);
strncpy(temp.name, &string[n+2], (strlen(string)-n-2));
}
您无法复制到tmp.surname或temp.name,因为您尚未保留任何内存。 (请注意,strncpy
不保留内存,只是复制。)char *name
仅为指针保留空间,而不是实际字符串。用户char name[30]
左右,或者像以后一样分配内存:
author_t auth;
auth.name = (char *) malloc(30);
(当然,姓氏相同)