String 节目一直在给我;堆芯倾卸;,虽然我可以';我不知道为什么

String 节目一直在给我;堆芯倾卸;,虽然我可以';我不知道为什么,string,struct,coredump,String,Struct,Coredump,所以,我写了这个程序,它接收一个字符串作为输入,这个字符串由姓氏和名字组成,这样写:“詹姆斯:勒布朗”。程序应该复制结构的姓氏变量中的姓氏,名称也是如此。没有编译错误,只有核心转储错误。有人能解释一下原因吗 #include <stdio.h> #include <string.h> struct author{ char *name; char *surname; }; typedef struct author author_t; au

所以,我写了这个程序,它接收一个字符串作为输入,这个字符串由姓氏和名字组成,这样写:“詹姆斯:勒布朗”。程序应该复制结构的姓氏变量中的姓氏,名称也是如此。没有编译错误,只有核心转储错误。有人能解释一下原因吗

#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);
    }   
#包括
#包括
结构作者{
字符*名称;
查*姓;
};
typedef结构作者;
author_t separate(字符*字符串);
内部主(空){
姓名;
printf(“Inserisci nome e cognome:”);
获取(姓名);
分开(姓名);
}
作者(字符*字符串){
int i,n=0;
作者;

对于(i=0;ioff-the-top-of-the-the-the-the-of-the-the-the-the-the-the-the-the-the-the-the-head-Id-say递增n不是一个好主意,因为n是要复制的项数,而不是字符串中的位置

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));
    }

(当然,姓氏也一样)

是的,但递增n表示遇到“:”时,n是要复制的字符数。我并不认为结构声明实际生成了一个实例,因为它后面没有名称;我不认为结构声明实际生成了一个实例(存储)因为它在;后面没有名称,也没有声明变量。我还建议不要使用字符串作为变量名-它可以在编译器内部使用,例如作为受保护的名称“系统”“变量”。不要使用这些名称,否则会出现意外情况。。。
author_t auth;
auth.name = (char *) malloc(30);