C 使用指向字符串的指针解析字符串,而不使用strdup和strtok函数

C 使用指向字符串的指针解析字符串,而不使用strdup和strtok函数,c,string,parsing,pointers,gps,C,String,Parsing,Pointers,Gps,我正在编写一个代码,其中我想解析一个传入字符串(基本上这是针对嵌入式项目的,但我想先用C进行测试)。该字符串可以是GPS输出,基本上是NMEA字符串。尽管我已经使用strdup和strtok函数完成了解析,但我,当我简单地使用一个字符串和指向该字符串的指针进行解析时,会出现阻塞 #include<stdio.h> int main() {int i; char inputstring[100]; //i assumed it to be input string, in this

我正在编写一个代码,其中我想解析一个传入字符串(基本上这是针对嵌入式项目的,但我想先用C进行测试)。该字符串可以是GPS输出,基本上是NMEA字符串。尽管我已经使用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;


}
#包括
int main()
{int i;
char inputstring[100];//我假设它是输入字符串,在本例中是由用户输入的。
char*ptr[12];
printf(“输入要立即打印的字符串。:\n”);
scanf(“%s”,输入字符串);
printf(“从用户接收的输入字符串为=\n%s\n”,inputstring);
对于(i=0;i

是一个由12个字符组成的指针数组,但您似乎希望它是一个由12个字符组成的数组。请删除星号:

char ptr[12];
重新命名,因为
ptr
是个糟糕的名字:

char tmp[12];
然后确保您终止它,并为终止符留出空间:

char tmp[13];

strlcpy(tmp, inputstring, sizeof tmp);
而不是

char *ptr[12];
char ptr[12]
:是一个字符数组,大小=12个字符元素。数组中每个元素的大小=字符大小(1字节)

char*ptr[12]
:是指针数组,大小=指针的12个元素。数组中每个元素的大小=指针的大小(32位系统为4字节,64位系统为8字节)。数组中的每个指针都可以指向字符串(char数组)

您应该使用以下代码

for(i=0;i<12;i++)
{
ptr[i] = inputstring[i];
}
在打印
ptr
字符串之前,必须在
ptr
字符串的末尾添加空字符

因此,您必须向
ptr
char数组的大小添加1个元素

char ptr[13];

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

谢谢,它可以工作。当然,我们也可以使用strcpy。我知道,如果我们使用*ptr,ptr[0]将指向整个inputstring[],这就是为什么之前我将整个输入字符串复制到ptr。
for(i=0;i<12;i++)
{
ptr[i] = inputstring[i];
}
memcpy(ptr, inputstring, 12);
char ptr[13];

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