2012-10-24 91 views
2

爲整數這是我的代碼:指針字符數組的在C

char str[] =""; 
scanf("%s",&str); 
char * pch; 
pch = strtok (str,"#"); 
printf ("%s\n",pch); 
return 0; 

我需要呈現的「1#2#3」的輸入的三個整數第一,第二和第三。 我上面的代碼只處理第一個變量並打印第一個字符串「1」,但我想將它保存到一個int變量。

我想:

int first = atoi(&pch) 

但「第一」得到是我如何能分析一個字符數組的指針值0而不是1爲int?

+0

這將是'的atoi(PCH)'不'的atoi(PCH )' –

回答

4

如果你知道輸入的精確佈局,以及int S上的確切人數,可以大大簡化這個:

scanf("%d#%d#%d", &a, &b, &c); 

這裏是一個link to a demo on ideone

+0

+1更簡單的選擇。 – hmjd

+0

這真棒 – Tom

4

該代碼具有未定義的行爲,因爲str不足以處理任何輸入。 str最多可容納1個char,並且scanf()將在讀入字符串時追加空終止符。如果用戶輸入單個字符並返回,則scanf()將超出數組str的範圍。

爲了校正,決定字符串的最大長度是可接受的,並且防止scanf()通過讀取更多:

char str[1024]; 
if (1 == scanf("%1023s", str)) 
{ 
} 

注意atoi()爲無效的輸入或用於"0"產生的0結果,這是沒有幫助的。改爲使用strtol(),或者從dasblinkenlight獲取答案,以獲得更簡單的解決方案。

1

您將char*傳遞給atoi(),而不是char**。只是把它作爲atoi(pch)

0

你已經聲明str爲char str [] =「」;.這將只分配一個字節到str。 它工作正常。我希望我在這裏不會錯過任何東西。
至於strtok的,你需要在一個while循環使用它
pch = strtok (str,"#");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, "#");
}