c/c++语言开发共享在C中使用strsep()和动态字符串数组

我有以下代码:

#include  int main(void) { char *buffer = NULL, **words = NULL, *aPtr = NULL, *sPtr; int count = 0; buffer = strdup("The quick brown fox jumps over the lazy dog"); sPtr = buffer; do { aPtr = strsep(&sPtr, " "); words[count++] = ... // missing code } while(aPtr); return 0; } 

你可以在上面看到我错过了一些代码……是否有任何类型的strdup()适用于这种情况? strdup()函数本身似乎不起作用……如果没有,我怎样才能使这段代码工作?

指针指针对我来说很头疼……

    你还没有分配words[0]words[1] ,…所以使用strdup并没有帮助。

    更糟糕的是,你事先并不知道会有多少单词,所以对你所需的空间进行malloc并不是一件容易的事。

    一种选择是用链表或动态数组替换words

    您需要为words数组分配空间,例如:

     #define MAX_NUM_WORDS 1024 ... /* on the stack */ char* words[MAX_NUM_WORDS]; ... /* or on the heap */ char** words; if (( words = ( char** )malloc( MAX_NUM_WORDS * sizeof( char* ))) == NULL ) { perror( "malloc" ); exit( 1 ); } 

    或者更好 – 使用动态数据结构,如单链表。

    如果只是为了尝试它,你可能会使用简单的东西:

     #include  #include  #define MAX_WORDS 100 int main(void) { char *buffer, *words[MAX_WORDS], *aPtr; int count = 0, i; buffer = strdup("The quick brown fox jumps over the lazy dog"); if (!buffer) return 1; do { aPtr = strsep(&buffer, " "); if (aPtr && count < MAX_WORDS) words[count++] = aPtr; } while(aPtr && count < MAX_WORDS); for (i = 0; i < count; i++) { printf("%sn", words[i]); } return 0; } 

    运行它:

     [macbook:~] jianlin $ ./a.out The quick brown fox jumps over the lazy dog [macbook:~] jianlin $ 

    你的第一个问题是你需要一个单词列表 – 你可以通过硬编码单词中的一些限制(一个N个单词的数组,每个单词是一个地址)来逃避,但这并不是真正的生产质量。 真正的解决方案是有一个列表(可以在内部实现为增长数组)

    我没有看到strdup的问题,但你应该使strsep无效,该函数没有一个好的API。 手工操作几乎更容易做到strsep。

    您需要一个动态分配的数组。 你可以自己动手,但为什么不使用Dave Hanson的C接口和实现中的 Seq_TSeq_addhi函数将完全按照您的意愿执行。

    上面的循环有点笨拙,所以我改为:

     #include  #include  #define MAX_WORDS 100 int main(void) { char *buffer, *words[MAX_WORDS], *aPtr; int count = 0, i; buffer = strdup("The quick brown fox jumps over the lazy dog"); if (!buffer) return 1; while((aPtr = strsep(&buffer, " ")) && count < MAX_WORDS) words[count++] = aPtr; for (i = 0; i < count; i++) { printf("%sn", words[i]); } return 0; } 

    输出是一样的。

      以上就是c/c++开发分享在C中使用strsep()和动态字符串数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/550094.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐