2013-05-07 40 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);