2014-09-01 69 views
0
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char str[800]; 

    char insert[7] = "insert "; 
    char* ip = &insert; 


    strcpy (str,"these "); 
    strcat (str,"strings "); 
    strcat (str,"are "); 

    strcat (str, ip); 
    // or? strcat (str, insert); 

    strcat (str,"concatenated."); 

    printf("%s\n", str); 

} 

所以即時通訊添加數組''插入'數組'str'有麻煩。林不知道,如果我不得不使用指針插入或不。香港專業教育學院嘗試了幾種不同的方法,但不能似乎得到它打印「這些字符串串聯插入」。我怎樣才能連接我的陣列與strcat

+0

的char * IP =插入; – suspectus 2014-09-01 13:10:08

+0

或char * ip =&insert [0]; – Coconop 2014-09-01 13:10:45

+0

爲什麼使用'char * ip =&insert;'而不是隻用'insert'如果你沒有用指針進行任何運算? – 2014-09-01 13:15:23

回答

0

當你做 - 將ADRESS

char insert[7] = "insert "; 
char* ip = &insert; 

這裏你是assig char數組地址的地址。不是Char數組的地址。 由於,如果您編譯程序,你會得到警告原樣

edit.c: In function ‘main’: 
edit.c:9:15: warning: initialization from incompatible pointer type [enabled by default] 

因此,嘗試這種變化 -

char insert[7] = "insert "; 
char *ip = insert; 

僅指定字符數組的地址。字符數組的地址不是地址

char *ip = "insert "; 

這也將爲您的工作!

否則 正如你所說,你可以按照這種方式須─

int main() 
{ 
    char str[800]; 

    char insert[7] = "insert "; 


    strcpy (str,"these "); 
    strcat (str,"strings "); 
    strcat (str,"are "); 

    strcat (str, insert); 

    strcat (str,"concatenated."); 

    printf("%s\n", str); 

} 
1

試試這個初始化,而不是

char insert[] = "insert "; 
char *ip = insert; 

這樣,你要確保相應的字符串是空終止,你沒有不兼容的指針類型的問題。注意:Ani已經好意指出初始化char insert[7] = "insert ";不可移植(這是合乎邏輯的,因爲當包含空值char時,大小應該是8)。顯然它會在某些編譯器上導致段錯誤。

+0

你的意思是'char * ip =「insert」'? – user1336087 2014-09-01 13:46:31

+0

不,'insert'是OP聲明的'char'數組的名字。 – downhillFromHere 2014-09-01 13:48:32

+0

然後它給出了分段錯誤! – user1336087 2014-09-01 13:50:18

0

當您使用的strcpy,根據手冊頁,它會開始複製你提供他在第一個參數的ADRESS的海峽。

因此而不是做

strcpy(str, "strings"); 

嘗試讓他在其中您的字符串結束

strcpy(str + strlen(str), "strings "); 

+0

真的,但問題是關於'strcat' – Coconop 2014-09-01 13:20:58

0

刪除char insert[7] = "insert ";它不是必需的。

變化char *ip = &insert;char *ip = "insert "

+0

它不會解決任何問題,它仍然是錯誤的... – Coconop 2014-09-01 13:19:02

+0

@Coconop:作出更改:) – user1336087 2014-09-01 13:28:51

+0

刪除downvote :) – Coconop 2014-09-01 13:40:06

0

有一個基本的問題,使代碼無法正常工作。

的問題是,在你的代碼分配方式如下:

char* ip = &insert; 

當它真正應該是:

char* ip = insert; 

變量insert不是數組。這是指向爲該計劃分配的地點的指針。基本上 - 它只是一個指向數組中第一個元素的指針。

方式:

insert[0] = 'a'; 

相同:

*insert = 'a'; 

所以刀片的地址是一個指針,它指向指向數組指針。

你既可以只放了*操作兩次(** - 有點像「的內容的內容... [某些變量,它通常是一個指針])在strcat使用ip或者你可以只輸入前strcat(str, insert);,因爲在這個程序中完全不需要變量ip

還有一個錯誤是沒有爲NULL終止符\0節省空間來宣告字符串的結尾。

因此,無論你輸入char insert[] = "insert ";它決定根據直接分配的數組的大小或者你可以做char insert[8] = "insert ";這基本上是該字符串的大小(它需要一個NULL終止所以它的「我」,「N」, '','e','r','t',''和'\ 0')。

0
$man strcat 

char *strcat(char *dest, const char *src); 

您可以:

strcat (str, ip); 

或者

strcat(str, insert); 

只要你正確初始化您的字符串:

char insert[] = "insert "; 
    char * ip = insert;