当我在程序中使用函数 strtok() 时,我发现它没有返回正确的指针,这导致我无法打印字符串。这是我的程序的一部分:
int main()
{
srand(time(NULL));
size_t n, c, k;
n = 10, c = 5, k = 5;
//read_data();
char str[] = "This, a sample string.";
char* pch;
printf("%s\n", str);
pch = strtok(str, " ,.");
//op_scatter_test(n, c, k);
return 0;
}
我在最后一行设置了断点并运行它。两个指针显示如下:
+ pch 0xffffffffabb5fb88 <error reading string characters> char *
+ str 0x00000064abb5fb88 "This" char[23]
值得一提的是,通过创建一个新程序并执行上面的代码,我可以获得正确的指针。
为什么会出现这种情况以及如何解决?
代码无法运行的原因显然是由于函数 strtok() 使用不当造成的。下面通过一个demo向您展示如何使用和调用。 strtok() 第一个参数的内容(字符串)被分解为更小的字符串(标记)。 strtok() 在字符串中搜索分隔符(第二个参数),并返回指向字符串中找到的每个后续标记的指针。
#include <string.h>
#include <stdio.h>
int main ()
{
char str[] = "This, a sample string.";
char* pch;
int count = 0;
printf("%s\n", str);
/* Get 1st token... Delimiter is just a space.*/
pch = strtok(str, " ");
/* get remaining tokens, space after space */
while( pch != NULL )
{
printf("%d). %s\n", ++count, pch );
pch = strtok(NULL, " ");
}
return(0);
}
输出:
这是一个示例字符串。
1)。这,
2)。 A
3)。样本
4).细绳。
按任意键继续 。 。 .