2012-11-01 59 views
0

有人可以幫助我使用此代碼。我需要將這兩個指針附加在一起,但它不適合我。該代碼不會將指針添加在一起。我認爲* mystrcat函數是錯誤的。如何附加兩個指針?

// stringAdds.cpp : Defines the entry point for the console application. 
// 

char *mystrcat(char *s, char *p); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char myChar = 0; 
    int i = 0; 

    char *s = (char*) malloc (1); 
    char *p = (char*) malloc (1); 

    printf("Input s: "); 
    while ((myChar=getchar()) != '\n') 
    s[i++]=myChar; 
    s[i]='\0'; 
    //scanf("%s", &s); 
    printf_s("%s", s); 

    printf("\nInput p: "); 
    i = 0; 
    while ((myChar=getchar()) != '\n') 
    p[i++]=myChar; 
    p[i]='\0'; 
    printf_s("%s\n", p); 

    printf_s("return string: %s", mystrcat(s,p)); 
} 

char *mystrcat(char *s, char *p) 
{ 
    int sizeOfs = 0; 
    int sizeOfp = 0; 
    int sizeZero = 0; 

    while(*s!='\0') 
    { 
     sizeOfs++; 
    } 
    while(*p!='\0') 
    { 
     sizeOfp++; 
    } 
    for(int i=0; i<sizeOfp; i++) 
     { 
      s[sizeOfs++]=p[sizeZero++]; 
     } 
    s[sizeOfs]='\0'; 

    return s; 
} 
+0

有用的提示,你可以更正你的已關閉的問題(解決它被關閉的原因)並點擊「標誌」並讓一個mod重新打開它。你不需要重複的事情,這樣 – Mike

回答

0

你是不是故意這樣?我認爲在你的例子中有一些遺漏的去引用。

char *strcat (char *dest, const char *src) 
{ 
char *dp; 
char *sp = (char *)src; 

if ((dest != NULL) && (src != NULL)) 
{ 
    dp = &dest[strlen(dest)]; 

    while (*sp != '\0') 
    { 
     *dp++ = *sp++; 
    } 
    *dp = '\0'; 
} 
return dest; 
} 
3

因爲這可能是一個功課,下面是一些提示:

mystrcat

  • while(*s!='\0')是一個無限循環,因爲s不循環體
  • 你裏面做的改變不需要知道尺寸p
  • 店面s這樣你可以使用一個循環
  • 複製p的字符轉換成什麼指向新s指針的值
  • 移動s返回字符串的結尾,直到你打'\0'
  • 你完成了

mystrcat

  • mystrcat函數假定s有足夠的空間來存儲s的所有字符,p的所有字符和空終止符。您的代碼malloc是足以容納空終止符的空間。您需要更改邏輯以提供更多空間。
  • 你所做的一切malloc必須是free d。
+0

請你去多進詳細 –

+0

我能做的循環體 –

+0

裏面有什麼關係,如果我的「存儲爲整型 –

0

正確的代碼:

char *ss=s; 
while(*ss!='\0') 
{ 
    sizeOfs++; ss++; 
} 
char *pp=p; 
while(*pp!='\0') 
{ 
    sizeOfp++; pp++; 
} 

您basicaly有一個無限循環。我也malloc更大的大小,以避免任何內存溢出。

1

你的malloc只有1個字節,但是你可能會把許多字符放到* s和* p中。在將它們放入陣列之前,您至少需要存儲每個角色的存儲空間。

0

Jeniffer,我不得不承認,這看起來非常相似to the code I mentioned to you before

但是你錯過了幾個關鍵要素。

首先,當我在做初步malloc()

char * str1 = malloc(6); // give string 1 some memory 

我做到了,從而有足夠的什麼,我打算把字符串(「你好」這個例子)。您正試圖動態獲取字符串,直到看到'\n'。所以,如果你想使用這種方法,你將不得不分配「足夠大」的東西。

char *s = (char*) malloc (1); 

因爲字符串必須有一個字符至少室和'\0'否則它不是一個字符串,只是一個字這不可能是「足夠大」。 :)

你真的不能確定什麼是「足夠大」的,所以如果有對字符串的大小不封頂然後就抓住一些內存,並得到更多,如果你親近過流吧:

char *s = (char*) malloc (50); //That's better, room for some char's 

第二點你錯過,在mystrcat()功能,我看到擺在那裏行:

// We need more memory for s, it was only made to hold its own string so : 
s = realloc(s, length of s + length of p + 1); // +1 for NULL terminator 

可以read up on realloc()但基本上可以給你更多的內存。當你連接你的字符串時,你可能需要獲得更多的內存。這是計算ap大小的點。


第三點,僞代碼,我給你的是:

while(s's character is not '\0') 

你正在做什麼都不行。你需要的字符串與檢查字符對'\0'像:

while(s[counter] != '\0') 

和遞增計數器,當您去。