#include <stdio.h>
int main ()
{
char a[] = "My name is";
char b[] = "kamran";
printf("%s %s", a+b);
return(0);
}
我试图添加两个字符串但是错误&#34;无效的操作数到二进制&#34;
答案 0 :(得分:5)
您可以将b
连接到a
,如下所示:
char a[18] = "My name is "; // a needs to be big enough
char b[] = "kamran";
strcat(a, b);
printf("%s", a);
要使用strcat()
,您需要添加string.h
。
答案 1 :(得分:4)
在此表达式中
a+b
数组指示符被隐式转换为指向字符串的第一个字符的指针。所以实际上你试图添加两个类型为char *
的指针。
来自C标准(6.3.2.1 Lvalues,数组和函数指示符)
3除非它是sizeof运算符或一元&amp;的操作数。 operator,或者是用于初始化数组的字符串文字,a 具有类型''数组类型''的表达式将转换为 带有''指向类型'的指针的表达式,指向初始值 数组对象的元素,而不是左值。如果是数组对象 具有寄存器存储类,行为未定义。
但是,没有为C和C ++中的指针定义operator +
。
如果你确实想要添加两个字符串,那么操作的结果将是包含前两个字符串的第三个字符串。
有两种方法。要么声明第三个字符数组足够大,以包含前两个字符串。或者您需要为结果字符串分配动态内存。
例如
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main( void )
{
char a[] = "My name is";
char b[] = "kamran";
char c[sizeof( a ) + sizeof( b )];
strcpy( c, a );
strcat( c, " " );
strcat( c, b );
puts( c );
char *d = malloc( sizeof( a ) + sizeof( b ) );
if ( d )
{
strcpy( d, a );
strcat( d, " " );
strcat( d, b );
puts( d );
}
free( d );
}
程序输出
My name is kamran
My name is kamran