将字符串添加到char数组并在C

时间:2017-02-12 22:01:08

标签: c arrays char concatenation

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

  

"字\ 0int \ 0paper \ 0mushroom \ 0etc \ 0"

我的第一个想法是将单词读入单独的字符数组 tempWord ,并将它们连接在一起,但是,如何在它们之间添加\ 0并保持 sTable 屁股最后一个阵列?我对C不太熟悉,请提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以通过为单词数组中应该接收单词的下一个位置保留指针来完成此操作。下面的函数add_word()获取指向char s数组中的位置和字符串的指针。将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