0

我正在尝试将 a 转换Char*Char**.

例如"echo Hello World"会变成{"echo", "Hello", "World"}

我知道,我可以从Char*with中得到单个单词strtok()

但是我在初始化时遇到了问题Char**,因为Char*它的大小未知,并且单个单词的大小也未知。

4

4 回答 4

0

char**只是指向第一个指针char *(或 char 指针数组的开头)。分配char*[](它!!不同char**)可能是一个更大的问题。你应该使用malloc这个任务。如果你事先不知道char*s 的个数,你可以猜测一些大小,用NULLs 填充它,并realloc在需要时调用。

于 2013-06-10T19:07:39.893 回答
0

您可以在您的字符串上运行并搜索“”(空格字符),然后您找到的每个空格都可以使用该函数获取子字符串,strncpy以获取当前空间索引和最后一个空间索引之间的字符串。您创建的每个字符串都可以存储在“动态”数组中(使用 malloc 和 realloc)。
对于第一个子字符串,您的起始索引为 0,在字符串的末尾,您将获得最后一个空间索引和字符串长度之间的最后一个子字符串。

于 2013-06-10T19:08:06.463 回答
0

Google 搜索中的第一个结果为您提供了一个可以修改的示例:

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

int main ()
{
  // allocate 10 strings at a time
  int size = 10;
  int i = 0;
  char str[] ="echo Hello World";
  char** strings = malloc(size * sizeof(char*));
  char* temp;

  printf ("Splitting string \"%s\" into tokens:\n",str);
  temp = strtok (str," ");
  while (temp != NULL)
  {
    strings[i++] = temp;
    temp = strtok (NULL, " ,.-");
    if(i % size == 0)
        //allocate room for 10 more strings
        strings = realloc(strings, (i+size) * sizeof(char*));
  }

  int j;
  for(j = 0; j < i; j ++) 
  {
      printf ("%s\n",strings[j]);
  }
  return 0;
}
于 2013-06-10T19:25:42.063 回答
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

size_t word_count(const char *str){
    enum { out, in } status;
    size_t count = 0;
    status = out;
    while(*str){
        if(isspace(*str++)){
            status = out;
        } else if(status == out){
            status = in;
            ++count;
        }
    }
    return count;
}

int main(void){
    char original[] = "echo Hello World";
    size_t i, size = word_count(original);
    char *p, **words = (char**)malloc(sizeof(char*)*size);

    for(i = 0, p = original;NULL!=(p=strtok(p, " \t\n")); p = NULL)
        words[i++] = p;
    //check print
    printf("{ ");
    for(i = 0;i<size;++i){
        printf("\"%s\"", words[i]);
        if(i < size - 1)
            printf(", ");
    }
    printf(" }\n");

    return 0;
}
于 2013-06-10T19:28:31.467 回答