你寫一個比較循環,而不是一個副本環路(「==
‘VS’=
」),並且您遞增,當你寫了錯誤的指針:
while(*(*dest++) == *src++);
(附加行:
*(*(++dest)) = '\0';
是了最新除了這個問題我不知道我想嘗試解析,在所有這不是解決問題的一部分,見d。下面藏密壇城藝術)
來獲取正確的最簡單的方法可能是:
char *tgt = *dest;
while ((*tgt++ = *src++) != '\0')
;
我們可以分階段糾正你的代碼(我這樣做是這樣):
static void myfunc(const char* src, char** dest)
{
*dest = (char *)malloc(200);
char *tgt = *dest;
while ((*(tgt++) = *(src++)) != '\0')
;
}
這parenthesises循環中的表達式完全。我們現在可以替代*dest
爲tgt
:
static void myfunc(const char* src, char** dest)
{
*dest = (char *)malloc(200);
char *tgt = *dest;
while ((*((*dest)++) = *(src++)) != '\0')
;
printf("1: %s\n", tgt);
}
而這種打印1: hello
,但主程序在複製的字符串末尾打印一個空行,因爲你已經修改了*dest
因此它指向NUL '\0'
。所以,你需要這樣做:
static void myfunc(const char* src, char** dest)
{
*dest = (char *)malloc(200);
char *tgt = *dest;
while ((*((*dest)++) = *(src++)) != '\0')
;
printf("1: %s\n", tgt);
*dest = tgt;
}
然後main()
將打印正確的答案。但是,如果你用tgt
('目標'的縮寫;我通常使用dst
作爲目的地,但這太接近你的dest
),那麼你最好避免增加*dest
的複雜性。
事實上,你應該考慮使用:
#include <string.h>
...
strcpy(*dest, src);
複製的字符串。使用strcpy()
可能會更好,如「更快」和「更簡單」並且明確無誤。
此外,你應該有:
#include <stdlib.h>
申報malloc()
。
而對於main()
正確的返回類型爲int
:
int main()
{
...
return(0);
}
在C99,回報是(遺憾)可選的零(成功)將假設,如果它是丟失;這匹配C++ 98的行爲。在早期版本的C中,返回不是可選的。
'dest'中沒有數據。首先用有效數據填充它,並確保它是空的,然後執行'=='操作。 – Mahesh 2012-03-16 13:17:29
你想完成什麼?它看起來像你試圖比較每個字符而沒有邊界檢查,並且你也不會在'malloc'後面設置任何東西。 – Joe 2012-03-16 13:17:52
遞增'char **'會使它指向下一個char *',而不是下一個'char'。 – sidyll 2012-03-16 13:18:08