我试图创建一个简单的程序,其他部分字符串被附加到另一个字符串。当我运行此代码时,它不会输出任何内容。对不起,我的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;
}
答案 0 :(得分:2)
您需要从strcat
中移除数组索引,该索引应如下所示:
strcat(stuff, test);
strcat(stuff, test2);
请注意,test
和test2
是字符串,但test[1]
和test2[0]
只是个别字符(e
和s
) - { {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;
}