2013-01-08 64 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你不能簡單地添加串在一起,因爲字符串實際上只是指向字符數組的指針。你需要做的是爲新的字符串分配存儲空間,並將每個字符的兩個字符串複製到它中。

相關問題