【问题标题】:referencing pointers to character arrays, a strtok worked example引用指向字符数组的指针,一个 strtok 工作示例
【发布时间】:2012-07-12 19:19:03
【问题描述】:

我正在使用 C 语言尝试对数组进行标记,然后将标记存储到全局字符串数组中。问题是我正在尝试使用指针来执行此操作,因此我不必重新引用字符串数组的索引。我知道数组应该有多大,这就是为什么使用索引很容易做到这一点,但是;我试图用指针来做到这一点。我不知道这是否可能,所以在这里纠正我。这是我尝试实现但没有成功的代码..

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

            char *cPayload2[PARAMS];

    void ReadIn2(char *input)
    {
        //Initialize the pointer to the 
        char *PayloadPtr;
        //start the parse
        char *token = strtok(input, "#");
        //pointer to an array of strings(pointers to character arrays)
        PayloadPtr = &cPayload2[0];

        while(token != NULL)
        {

这是有问题的部分,我可以用这样的子句更改全局数组的索引吗?看来我无法用这个打印出有效载荷数组。

            *PayloadPtr = token;
            //increment the index that the ptr refrences
            PayloadPtr++;
            //tokenize again
            token = strtok(NULL, "#");
        }

    }



    int main(void)
    {

        char input[] = "jsiUjd3762BNK==#KOIDKKkdkdwos==";

        ReadIn2(input);

此打印输出由于某种原因被铺盖

        printf("%s\n",cPayload2[0]);
        printf("%s\n",cPayload2[1]);

        return 0;
    }

任何提示将不胜感激。

【问题讨论】:

  • 这看起来不太正确*PayloadPtr = token;,因为这两个变量的类型都是char *,而您正在取消引用PayloadPtr

标签: c pointers tokenize


【解决方案1】:
char *PayloadPtr;

应该是

char **PayloadPtr;

除此之外,您的代码还可以。

【讨论】:

  • 谢谢先生,工作完美。这在概念上仍然让我有点困惑,但我想这是随着时间和经验而来的。
  • @Recurrsion 我认为这只是一个错字,因为其余代码按预期完美运行。您也许应该提高编译器的警告级别,这会告诉您不兼容的分配。
  • 哇,谢谢丹尼尔;我最初拒绝了,因为我认为没有必要更高的级别。
  • 嗯,这不是必要的,但除非您的代码即使在警告级别较低的情况下也会产生大量警告,否则它有助于找到有问题的部分。此外,很高兴看到您的代码编译无警告,即使在偏执级别。
猜你喜欢
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多