将Char *转换为Char *数组

时间:2013-06-10 18:57:25

标签: c arrays string converter

我正在尝试将Char*转换为Char**

e.g。 "echo Hello World"将成为{"echo", "Hello", "World"}

我知道,我可以使用Char*strtok()获取单个字词。

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

4 个答案:

答案 0 :(得分:0)

你的char**只是指向第一个char *(或者是char指针数组的开头)的指针。 char*[]的分配(它的char**相同!!)可能是一个更大的问题。 您应该使用malloc执行此任务。如果您事先不知道char*的数量,则可以猜测一些尺寸,填写NULL并在需要时致电realloc

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

/* 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;
}

答案 3 :(得分: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;
}