あなたは代わりにコピーループ(「==
『VS』 =
」)のループを比較書いた、とあなたが書く間違ったポインタインクリメントされています
while(*(*dest++) == *src++);
(追加しますライン:
*(*(++dest)) = '\0';
が質問にする最新追加され、私は私がすべてであること解析してみたいかわからないことが問題の解決策の一部ではありませんDを参照してください。。。以下iscussion)
それが正しい取得する最も簡単な方法は、おそらくです:。
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')
;
}
この括弧のループの表現は完全に。
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'
を指しているので、メインプログラムは、空行を出力します。私たちは今、
tgt
ため
*dest
を置き換えることができます。だから、あなたは何をする必要があるでしょう:
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
(「target」の省略形ですが、私は通常宛先にdst
を使用しますが、これはあなたのdest
に近すぎます)を使用すると、最初は*dest
を増やす複雑さを避けることができます。
実際には、あなたが使用することを検討すべきである:
#include <string.h>
...
strcpy(*dest, src);
は、文字列をコピーします。 strcpy()
を使用すると、「より速く」「より簡単に」正確に正しいと思われます。
また、あなたが持っている必要があります。
#include <stdlib.h>
をmalloc()
を宣言します。
そしてmain()
の正しい戻り値の型はint
次のとおりです。
C99で
int main()
{
...
return(0);
}
それが欠落している場合、リターンです(残念)オプションとゼロ(成功)が仮定されます。これはC++ 98の動作に適合します。以前のバージョンのCでは、リターンはオプションではありませんでした。
「dest」にはデータがありません。最初に有効なデータを入力し、それがヌルで終了していることを確認してから、 '=='操作を行います。 – Mahesh
あなたは何を達成しようとしていますか?あなたが境界チェックをしないで各文字を比較しようとしているように見えますし、 'malloc'した後に決して何にも' dest'を設定することはありません。 – Joe
'char **'をインクリメントすると、次の 'char *'を指し示し、次の 'char'は指しません。 – sidyll