将字符串的一部分附加到另一个字符串

时间:2017-01-22 10:09:17

标签: c string char append strcat

我试图创建一个简单的程序,其他部分字符串被附加到另一个字符串。当我运行此代码时,它不会输出任何内容。对不起,我的C知识非常低。所有帮助表示赞赏。

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

int main() {
    char stuff[100] = "Y";
    char test[] = "hello", test2[] = "shelllo";

    strcat(stuff, test[1]);
    strcat(stuff, test2[0]);

    printf("%s\n", stuff);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

您需要从strcat中移除数组索引,该索引应如下所示:

strcat(stuff, test);
strcat(stuff, test2);

请注意,testtest2是字符串,但test[1]test2[0]只是个别字符(es) - { {1}}使用字符串,而不是单个字符。

如果你只想复制字符串的一部分(即跳过前几个字符),那么使用指针算法

strcat

,或者

strcat(stuff, test + 1); // skip 1st character of test (ie start copying from `e`)

答案 1 :(得分:2)

您使用strcat参数调用char而不是指向char的指针,行为未定义。

以下是复制字符串部分的解决方案:

  • 使用strncat():它将不超过给定数量的字符复制到第一个参数的末尾。
  • 使用snprintf()格式%.*s%s格式的 precision 字段指定要从字符串中复制的最大字符数。它可以指定为十进制数或*,在这种情况下,精度在字符串参数之前作为int参数传递。

以下是一个例子:

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

int main(void) {
    char stuff[100];
    char test[] = "Hello";
    char test2[] = "The world is flat";

    /* using strncat */
    strcpy(stuff, test);
    strncat(stuff, test2 + 3, 6);
    printf("%s\n", stuff);

    /* safer version using snprintf */
    snprintf(stuff, sizeof stuff, "Hello %.*s\n", 5, test2 + 4);
    printf("%s\n", stuff);

    return 0;
}