程序一直给我“核心转储”,虽然我找不到原因

时间:2015-07-01 13:55:06

标签: string struct coredump

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

2 个答案:

答案 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);

(当然,姓氏相同)