gpt4 book ai didi

c - 想要使用特定字符将字符串分隔为标记

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:14 25 4
gpt4 key购买 nike

这里我有一个字符串表示字符数组。该数组还包含分隔符。现在我只想取出没有这个分隔符的字符串。

我正在使用 strtok 函数。

我想用这个分隔符分隔我所有的话。

但是我在这段代码中遇到了一些问题。

如果我做错了什么请告诉我,或者告诉我实现这件事的其他简单易行的方法,还要考虑内存风险。

这里这一行 pch = strtok (str,&sep); 什么也得不到。问题只在这里。

代码

/* strtok example */
#include <stdio.h>
#include <string.h>

#define SEPRATOR 0x03

int main ()
{
char str[1024];
int count = 0;
char sep;
memset(str,0,1024);
sep = SEPRATOR;

memcpy(str,"1",strlen("1"));
count = count + strlen("1");
str[count++] = sep;
memcpy(str+count,"0",strlen("0"));
count = count + strlen("0");
str[count++] = sep;
memcpy(str+count,"2",strlen("2"));
count = count + strlen("2");
str[count++] = sep;
memcpy(str+count,"abc_1.0.xyz",strlen("abc_1.0.xyz"));
count = count + strlen("abc_1.0.xyz");
str[count++] = sep;
memcpy(str+count,"3",strlen("3"));
count = count + strlen("3");
str[count++] = sep;
memcpy(str+count,"23455.456",strlen("23455.456"));
count = count + strlen("23455.456");

printf("Input String = %s\n",str);

char * pch;
int pchcount = 0;
pch = strtok (str,&sep);
while (pch != NULL)
{
pchcount++;
printf ("%d === %s\n",pchcount,pch);
pch = strtok (NULL,&sep);
}
return 0;
}

最佳答案

strtok() 的第二个参数是一个以空结尾的字符串 (char*),但是您传递的是单个 char 的地址.当 char* 时,它不会以 null 终止。更改为:

char sep[2] = { SEPRATOR, 0 };

相应地更改 sep 的当前用法:

str[count++] = sep[0];

pch = strtok(str, sep);

您可能会发现 snprintf()memcpy() 调用序列更容易构造您的 str

另外,如果你想初始化str:

char str[1024] = ""; /* instead of performing a memset(). */

关于c - 想要使用特定字符将字符串分隔为标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11418369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com