#include<stdio.h>
#include<string.h>
int main()
{
char c='g';
char d[]="John ";
strcat(d,&c);
puts(d);
return 0;
}
输出结果为:
John gC
&#39; C&#39;没有必要。
此外,const char*
在这里意味着什么?
char *strcat(char *dest, const char *src)
另外,如果我想在字符串末尾添加一个字符,那么这样的语句(在循环内)是错误的吗?
char arr[]=' ';
symb[]={'a','b','c'}
strcat(arr, &symb[k]);
k++;
答案 0 :(得分:1)
您正在写出d
的范围,您还需要一个char
的空间,更改为
char d[7] = "John ";
或(如果您不想指定数组的大小):
char d[] = "John \0";
或
char d[] = {'J', 'o', 'h', 'n', ' ', '\0', '\0'};
同样strcat
想要一个有效的NUL终止字符串,并且您正在将指针传递给单个char
,更改为
char *c= "g";
答案 1 :(得分:1)
两种方式(甚至更多): -
1&GT;
char *c="g";
char d[10]="John ";
strcat(d,c);
2 - ;
char c[]="g";
char d[10]="John ";
strcat(d,c);
虽然我建议d [10] = {0};然后复制字符串。 (正如大卫在评论中提到的那样。)
答案 2 :(得分:0)
您需要学习C和C风格字符串的基础知识。具体来说,一个特殊的零值字符标识字符串的结尾。
您复制了字符串但未复制终结符。因此,像puts()
这样的函数不知道何时停止并打印恰好在内存中的其他字符。
答案 3 :(得分:0)
这有效:(如果你想要John g)
#include<stdio.h>
#include<string.h>
int main()
{
char c='g';
char d[10];
char temp[2];
strcpy(d ,"John ");
temp[0]=c;
temp[1]='\0';
strcat( d , temp );
puts(d);
return 0;
}
这有效:(如果你想要约翰)
#include<stdio.h>
#include<string.h>
int main()
{
char c='g';
char d[]="John ";
//strcat(d,&c);
d[strlen(d)-1]=c;
puts(d);
return 0;
}
答案 4 :(得分:0)
程序中有未定义的行为。 strcat
需要null terminated
字符串作为其c
不在其中的参数。你可以这样做 -
char c[]="g";
char d[7]="John "; // leave space for 'g' as well as for '\0'
strcat(d,c); // then pass both to strcat
另一种方法是使用sprintf
-
char c[]="g";
char d[10]="John";
size_t n =strlen(d);
sprintf(&d[n]," %s",c);