如何添加两个字符串?

时间:2016-05-15 16:45:30

标签: c string string-concatenation

#include <stdio.h>
int main ()
{
    char a[] = "My name is";
    char b[] = "kamran";

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

    return(0);

}

我试图添加两个字符串但是错误&#34;无效的操作数到二进制&#34;

2 个答案:

答案 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