2012-07-09 38 views
2

我試圖連接2個字符串而不使用strcat,但我得到一個運行時錯誤。請別人幫我在這裏...分割錯誤出來了嗎?

還有,就是這種說法q=q+len;正確嗎?我們可以添加一個變量到指針嗎?

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

void xstrcat(char*,char*); 
int main() 
{ 
    char source[]="folks"; 
    char target[30]="hello"; 
    xstrcat(target,source); 
    printf("%s",source); 
    printf("%s",target); 
    return 0; 
} 

void xstrcat(char*p,char*q) 
{ 
    int len=0; 
    len=strlen(q); 
    q=q+len; 
    while(*p!='\0') 
    { 
     *q=*p; 
     q++; 
     p++; 
    } 
    *q='\0'; 
} 
+1

你應該將'source'追加到'target',但似乎你正在做另一種方式。 – nhahtdh 2012-07-09 06:00:55

+0

調試怎麼樣?你有沒有嘗試調試你的代碼?你的代碼包含一個明顯的錯誤,這個錯誤會被調試會話立即顯示出來。這不應該是「爲我調試我的代碼」的地方。 – AnT 2012-07-09 06:05:36

+0

另外,如果你不確定'q = q + len'表達式的有效性,你怎麼在我們的代碼中使用它。這個代碼實際上是你的嗎? – AnT 2012-07-09 06:08:33

回答

3

在您的實現有些錯誤:

1 - 您正在訪問隨機內存。一旦你的字符串中沒有/0

while(*p!='/0') 

必須是:

while(*p!='\0') 

注意斜線\

2 - 當您嘗試將*p添加到*q時,您正在覆蓋隨機內存。您必須創建一個具有足夠空間的新變量來存儲它們。

同樣,是本聲明Q = Q + LEN;正確?我們可以添加一個變量到 指針嗎?

是的。 It's a pointer arithmetic expression.

+0

如何將變量添加到指針可以做到這一點? – amadeus 2012-07-09 06:01:59

+0

@ user1509676:檢出更新。 – Jack 2012-07-09 06:23:07

+0

thnx mate for help .. – amadeus 2012-07-09 06:37:08

0

你正在覆蓋內存。

您串連到source不具有足夠的內存來容納級聯字符。

你可能想扭轉sourcetarget定義。 即

char source[30] = "folks"; 
char *target = "hello"; 

或者

呼叫xstrcat作爲xstrcat(source, target);

1

你逝去的目標是在函數調用的第一個參數,但似乎功能嘗試使用第二個參數爲目標。所以,也許你只需要在函數調用中切換參數的位置。

另一件事是,你是逃避空字符時使用斜槓,而不是反斜槓。因此,將'/ 0'更改爲'\ 0'。

有關添加的int指針:該指針運算的類型是完全合法的功能,在您的案件。

1

有幾件事情,第一,你需要覈對\0而不是/0

while(*p!='\0') 

但同時,你試圖將字符串添加到字符串字面量,這將導致不確定的行爲。交換機

xstrcat(target,source); 

xstrcat(source, target); 

最後,在xstrcat最後一行應改爲

*q='\0'; 
0

問題出在你的代碼在下面的一行:

xstrcat(target,source); 

它應該是

xstrcat(source,target); 

或在您的xstrcat功能,儘量考慮到第一個參數爲目標,第二源。