繁体   English   中英

将字符串添加到char数组并在C中以\\ 0分隔

[英]Adding strings to a char array and separating by \0 in C

我正在尝试编写一些代码,以使单词不断添加到名为sTable的字符数组中,并以\\ 0分隔。 sTable的最终内容如下所示:

“ word \\ 0int \\ 0paper \\ 0mushroom \\ 0etc \\ 0”

我的第一个想法是将单词读入一个单独的字符数组tempWord并将它们连接在一起,但是,我如何能够在它们之间添加\\ 0并使sTable ass保留为最终数组? 我对C不太熟悉,在此先感谢您的帮助!

您可以通过在要接收单词的单词数组中保留下一个位置的指针来做到这一点。 下面的函数add_word()获取一个指向char数组和一个字符串中的位置的指针。 wrd添加到从next一个开始的位置后,将返回指向空终止符之后的位置的指针。 最初给next指针一个字符数组words[]第一个位置的地址。 请记住,这里没有错误检查,因此调用者负责确保字符串适合数组。

#include <stdio.h>

#define MAX_SIZE  1000

char * add_word(char *next, const char *wrd);

int main(void)
{
    char words[MAX_SIZE];
    char *next = words;

    next = add_word(next, "word");
    next = add_word(next, "int");
    next = add_word(next, "mushroom");
    next = add_word(next, "etc");

    for (char *ptr = words; ptr < next; ptr++) {
        if (*ptr == '\0') {
            printf("\\0");
        } else {
            putchar(*ptr);
        }
    }

    putchar('\n');

    return 0;
}

char * add_word(char *next, const char *wrd)
{
    while (*wrd != '\0') {
        *next++ = *wrd++;
    }
    *next++ = '\0';

    return next;
}

程序输出:

word\0int\0mushroom\0etc\0

这是经过修改的上述程序的版本,以便add_word()函数为要添加的单词的起始位置获取索引,并为下一个单词返回和索引。 还添加了一个数组word_indices[]来保存添加到words[]每个单词的起始索引。

#include <stdio.h>

#define MAX_SIZE  1000

size_t add_word(char *tokens, size_t next, const char *wrd);

int main(void)
{
    char words[MAX_SIZE];
    size_t word_indices[MAX_SIZE] = { 0 };
    size_t  next = 0, count = 0;

    char *input[4] = { "word", "int", "mushroom", "etc" };

    for (size_t i = 0; i < 4; i++) {
        next = add_word(words, next, input[i]);
        word_indices[++count] = next;
    }

    /* Show characters in words[] */
    for (size_t i = 0; i < next; i++) {
        if (words[i] == '\0') {
            printf("\\0");
        } else {
            putchar(words[i]);
        }
    }
    putchar('\n');

    /* Print words in words[] */
    for (size_t i = 0; i < count; i++) {
        puts(&words[word_indices[i]]);
    }

    return 0;
}

size_t add_word(char *tokens, size_t next, const char *wrd)
{
    while (*wrd != '\0') {
        tokens[next++] = *wrd++;
    }
    tokens[next++] = '\0';

    return next;
}

程序输出:

word\0int\0mushroom\0etc\0
word
int
mushroom
etc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM