2016-05-15 58 views
-2
#include <stdio.h> 
int main() 
{ 
    char a[] = "My name is"; 
    char b[] = "kamran"; 

    printf("%s %s", a+b); 

    return(0); 

} 

我尝试添加两个字符串,但得到的错误“无效操作数为二进制”如何添加两个字符串?

+0

看起来你已经省略了错误信息的尾部。整个消息可能类似于“对二进制无效的操作数+”。 –

+0

您不需要添加两个数组来一个接一个地打印它们。看到答案。如果您真的想将它们添加到第三个字符串中,最简单的方法是使用标头中声明的函数。 ( - : – user3078414

+0

http://stackoverflow.com/questions/8465006/how-to-concatenate-2-strings-in-c –

回答

3

在这个表达式中

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 
+0

一个非常详细的答案,我正在寻找一个特别的,这是我想要与我的程序,谢谢 –

+0

@ kamranhassan没有。 ) –

6

您可以连接ba这样的:

char a[18] = "My name is "; // a needs to be big enough 
char b[] = "kamran"; 

strcat(a, b); 

printf("%s", a); 

要使用strcat()您需要包括string.h

+2

请不要忘记'#include ' – user3078414