2013-01-08 66 views
-2

Possible Duplicate:
C String Concatenation错误:无效的操作数为二进制+字符*

有以下代码:

 char *doencode(const unsigned char *input, int length) 
     { 
     //irrelevant code 
     } 

     char *fname, *lname; 
     char *encoded, *name; 

     name = fname + "|" + lname; 
     encoded = doencode(name, 30); 

,我得到这个错误:无效的操作数为二进制+

我怎么能结合fname & | & lname?

+0

即使它编译,它也不起作用。 'name'没有被分配到任何地方。 – netcoder

回答

6

不能连接char*char[]"|")或使用+的任何排列。改为使用strncat()snprintf(),并确保目标缓冲区有足够的内存来存储最终的字符串。

+0

更新我的答案,如果我替换|与\ 0? –

+0

@SamReina,nope。您仍然需要使用函数来连接字符串。用'“\ 0”替换'“|”'不会影响涉及的类型。 – hmjd

2

C不像java脚本。这是不正确的在C:

name = fname + "|" + lname; 

,你可以这样做:

sprintf(name,"%s|%s", fname, lname); 

name指针应该指出足够的存储空间。

name = malloc(strlen(fname)+strlen(lname) + 2); 

+2:+1 "|"和+1 null在字符串的结尾

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

int main() 
{ 
    char *fname, *lname, *name; 

    printf("Enter your first name: "); 
    scanf ("%ms", &fname); 

    printf("Enter your last name: "); 
    scanf (" %ms", &lname); 

    name = malloc(strlen(fname)+strlen(lname) + 2); 
    sprintf(name,"%s|%s", fname, lname); 

    printf("name = %s\n",name); 

} 
+0

这假定'name'指向足够的空间,即它必须是一个有效的指针,并且不会有边界检查。 – unwind

+0

的确,我会用 – MOHAMED

0

用C你不能简单地添加串在一起,因为字符串实际上只是指向字符数组的指针。你需要做的是为新的字符串分配存储空间,并将每个字符的两个字符串复制到它中。

相关问题