程序不断给我"核心转储",尽管我找不到原因



所以,我编写了这个程序,它接收一个字符串作为输入,该字符串由姓氏和姓名组成,写得像这样:"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);
    }   

我想说,增加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));
    }

您无法复制到tmp.s姓氏或temp.name中,因为您尚未保留任何内存。(注意,strncpy不保留内存,它只是复制。)char *name只为指针保留空间,而不是实际字符串。用户char name[30]左右,或稍后分配内存,如下所示:

author_t auth;
auth.name = (char *) malloc(30);

(当然,姓氏也是如此)

相关内容

  • 没有找到相关文章

最新更新