strtok() 未返回正确的指针

问题描述 投票:0回答:1

当我在程序中使用函数 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]

值得一提的是,通过创建一个新程序并执行上面的代码,我可以获得正确的指针。

为什么会出现这种情况以及如何解决?

c string strtok
1个回答
0
投票

代码无法运行的原因显然是由于函数 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).细绳。 按任意键继续 。 。 .

© www.soinside.com 2019 - 2024. All rights reserved.