2012-10-26 57 views
1

我正在使用strtok從字符串名稱[result]中提取2個單詞。我想從strtok獲取第一個值,並將其存儲到名爲lastName的char數組中,並將第二個值存儲到名爲firstName的char數組中。但是,當我編譯我的代碼時,我得到了一個無效的初始化器錯誤,這兩行代碼由箭頭指示。我該如何解決我的問題?C編程strtok問題

char *p = NULL; 
p = strtok(names[result]," "); 
char lastName[50] = p; <--- 
p = strtok(NULL, " "); 
char firstName[50] = p; <--- 
printf("%s %s\n",firstName,lastName); 
+1

試過的strcpy()? – Jeyaram

+1

sprintf()也是一個選項 –

回答

1

strtok給出了標記字符串的指針。

char lastName[50] = p;這不是一件真正的好事,你在那裏做。應該使用strncpy()來複制字符串,或者如果只需要指針,那麼應該存儲在另一個指針中。

+0

謝謝!我使用了strncpy(),它工作。 = d –

1

C中的數組初始化只能使用文字而不是變量。所以你的代碼是一個語法錯誤。

您需要使用典型的strcpy()函數來複制字符串或一些更安全(和現代)的變體,如strlcpy()snprintf()

您也可以使用sscanf()在格式字符串中使用適當的大小說明符在一個調用中執行解析和複製操作,以避免緩衝區溢出的風險。

0

你可以初始化一個字符串到字符數組,如char lastName [50] =「Sample」; 在這種情況下,您正試圖初始化一個指向字符數組'char lastName [50] = p;'的指針這是無效的。 更好的是,您可以使用strcpy,memcpy函數將字符串複製到字符數組中,或者您可以將其分配給另一個指針。

0

其他答案都是正確的,因爲複製字符串數據將使該程序工作,但原因strtok是如此卑鄙(通常使用它被認爲是不明智的)是它改變你的輸入,通過插入NULL s轉換爲原始字符串。如果您打算使用它,那麼您最好還是使用strtok直接返回的指針。

值得注意的是,雖然,是因爲改變了輸入時,也許誰通過了輸入你是不是期待的是,它可能是更好的它曾經呼籲strtok之前輸入複製到一個單獨的字符串第一

遵守本守則的輸出明白我的意思:

int main(int argc, char *argv[]) { 
    char name[] = "Firstname Lastname"; 

    printf("Name before strtok: %s\n", name); 
    char *first = strtok(name, " "); 
    char *last = strtok(NULL, " "); 

    printf("Token strings: first=%s last=%s\n", first, last); 
    printf("Name after strtok: %s\n", name); 
} 

產地:

Firstname Name before strtok: Firstname Lastname 
Token strings: first=Firstname last=Firstname 
Name after strtok: Firstname