将字符串转换为C中的字符串数组

时间:2015-10-12 18:00:56

标签: c arrays string

所以我有一个名为c的字符串。我正在使用此文件从文件中读取它:

fscanf(file, "%[^/0]", &c);

我有另一个变量声明为char * array [41]。我需要这个是c的单个单词/字符串的数组。

问题在于我不知道c中有多少单个单词/字符串,因为我将它作为整行从文件中获取。我的想法是将它按字符逐个放入数组中,如果它是空格,我可以用空字符替换它,但我95%确定它根本不起作用。我的另一个想法是,如果我能够以某种方式知道线中有多少个字符串并将每个字符串捕获为一个字符串以放入数组中,但是我担心它会弄乱那个字符串之后的字符串,因为我无法确定有多少串。

2 个答案:

答案 0 :(得分:0)

这正是strtok(3)所做的。您需要做的就是分配一个"数组",例如

size_t num = 16;
char **arr = malloc(num * sizeof(char *));

然后用strtok()的结果填充它并计算...如果到达num,请执行类似

的操作
if (count == num)
{
    num *= 2;
    arr = realloc(arr, num * sizeof(char *));
}

malloc()realloc()添加错误检查。

答案 1 :(得分:0)

如果你担心字符串的长度,请相应地重新分配一些动态分配的数组的大小。然后你可以将单个单词存储在另一个数组中。检查出来:

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

int GetWords(const char *String,char buffer[][255]);

int main(void)
{
    char buffer[30][255];

    const char *sentence = "Hello how are you";

    int num_of_words = GetWords(sentence,buffer);

    for( int n = 0 ; n < num_of_words ; n++ )
    {
        printf("word %d : %s\n" , n+1 , buffer[n]);
        //or do something else
    }

    return 0;
}

int GetWords(const char *String,char buffer[][255])
{
    int x = -1 , y = 0 , z = 0 ;

     size_t len = strlen(String) , n = 0 ;

    for( n = 0 ; n < len ; n++ )
    {
        y++;

        if( String[n] == ' ' /* || String[n] == ',' */ )
        {
            y = 0;
            z = 0;
        }

        if( y == 1 ) x++;

        if( y > 0 )
        {
            buffer[x][z] = String[n];
            z++;
            buffer[x][z] = '\0';
        }
    }

    //return number of words
    return (x+1);
}