2013-05-07 61 views
0

我正在編寫一個代碼,我要解析一個傳入的字符串(基本上這是爲embeddded項目,但我想先在C中測試它) 。字符串可以是一個GPS輸出,基本上是一個NMEA字符串。儘管我已經使用strdup和strtok函數進行了解析,但是當我解析時,只是使用字符串和指向該字符串的指針進行了解析。使用指向字符串的指針解析字符串而不使用strdup和strtok函數

#include<stdio.h> 

int main() 
{int i; 
char inputstring[100]; //i assumed it to be input string, in this case enter by user. 
char *ptr[12]; 

printf("Enter the string to be printed now.: \n"); 
scanf("%s",inputstring); 

printf("the input string being received from the user is = \n %s \n", inputstring); 

for(i=0;i<12;i++) /*used this for loop to get first 12 characters from inputstring copied into ptr[i] */ 
{ 
ptr[i] = &inputstring[i]; 
} 
printf("value of store is = %s \n",*ptr); 
return 0; 


} 

,但這樣做的輸出中是整個inputstring而不是第12 characters.I進一步挖掘了這一點,並發現,* PTR當點inputstring,其指向inputstring [0] ,將整個複製字符串,而不是複製前12個字符。我們可以限制這個嗎?

需要幫助。我有一個替代方法,但需要幫助挖掘我的這個代碼。

回答

1

此:

char *ptr[12]; 

是12個字符指針數組,但你似乎希望它是12個字符數組。刪除星號:

char ptr[12]; 

,並重新命名它,因爲ptr是一個糟糕的名字:

char tmp[12]; 

然後確保你終止它,且有足夠空間終結者:

char tmp[13]; 

strlcpy(tmp, inputstring, sizeof tmp); 
+0

感謝,它works.well我們可以ofcourse使用的strcpy also.And我才知道,如果我們使用的是* ptr,ptr [0]將指向整個inputstring [],這就是爲什麼早些時候我得到整個輸入字符串複製到ptr。 – shailendra 2013-05-07 11:54:14

1
char ptr[12]; 

,而不是

char *ptr[12]; 

char ptr[12]:是一個大小爲12個字符的字符數組。數組中每個元素的大小= char的大小(1個字節)。

char *ptr[12]:是指針數組,大小= 12個指針元素。數組中每個元素的大小=指針的大小(32位系統爲4個字節,64位系統爲8個字節)。數組中的每個指針都可以指向一個字符串(char數組)。

你應該使用下面的代碼,而不是

for(i=0;i<12;i++) 
{ 
ptr[i] = inputstring[i]; 
} 

或多個簡單

memcpy(ptr, inputstring, 12); 

,你必須在你ptr字符串的結尾你打印ptr字符串之前加空charachter。

所以你要1個元素添加到ptr字符數組的大小

char ptr[13]; 

memcpy(ptr, inputstring, 12); 
ptr[12] = '\0'; 
printf("value of store is = %s \n",ptr);