#include <stdio.h>
int main()
{
char a[] = "My name is";
char b[] = "kamran";
printf("%s %s", a+b);
return(0);
}
我尝试添加两个字符串,但得到的错误“无效操作数为二进制”如何添加两个字符串?
#include <stdio.h>
int main()
{
char a[] = "My name is";
char b[] = "kamran";
printf("%s %s", a+b);
return(0);
}
我尝试添加两个字符串,但得到的错误“无效操作数为二进制”如何添加两个字符串?
在这个表达式中
a+b
阵列标志符隐式转换为指针到串的第一字符。所以实际上你试图添加两个类型为char *
的指针。
从C标准(6.3.2.1左值,数组和功能指示器)
3除了当它是sizeof操作或一元& 操作者的操作数,或是字面使用的字符串为了初始化一个数组,一个 表达式的类型为'''的数组被转换为 表达式,该表达式的类型''指针指向类型'',指向数组对象的初始 元素并且不是左值。如果数组对象 具有寄存器存储类,则行为未定义。
但是没有为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
一个非常详细的答案,我正在寻找一个特别的,这是我想要与我的程序,谢谢 –
@ kamranhassan没有。 ) –
您可以连接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
。
请不要忘记'#include
看起来你已经省略了错误信息的尾部。整个消息可能类似于“对二进制无效的操作数+”。 –
您不需要添加两个数组来一个接一个地打印它们。看到答案。如果您真的想将它们添加到第三个字符串中,最简单的方法是使用标头中声明的函数。 ( - : –
user3078414
http://stackoverflow.com/questions/8465006/how-to-concatenate-2-strings-in-c –