2015-07-01 24 views
0

所以,我寫了這個程序,它接收到一個字符串,其中包含姓和名,如下所示:「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

off teh top of the head Id我說增加n不是一個好主意,因爲我不需要複製項目中的位置。

+0

沒錯,但n加1成爲我的,當「:」遇到,n是數字要複製的字符 –

+0

我沒有做結構聲明實際上做了一個實例,因爲它沒有名稱後; – feet

+0

我不認爲結構聲明實際上做了一個實例(存儲),因爲它沒有一個名字後;並沒有聲明一個變量。我還建議不要使用字符串作爲變量名 - 它可以在編譯器內部使用,即像受保護的名稱'system''variable'一樣。不要使用這些或期望意外... – feet

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

(同爲姓,當然)

相關問題