-3
#include <stdio.h>
char *strcpy_(char *dst, char *src)
{
  while((*src++ = *dst++)!= '\0')
  return src;
}
main()
{
  char src_str[] = "C programming language";
  char dst_str[100];
  printf("dst_str:%s\n", strcpy_(dst_str, src_str));
}

この関数を実行するたびに、これの出力は「プログラミング言語」になります C が見つからない、ここで何が起こっているのか、もう 1 つ質問があります。関数の引数を渡すために配列を使用したくないということです。char src_str[] = "C programming language"orを使用したい これの代わりにandchar dst_str[100]のようなポインターを使用したいのですが、使用するとセグメンテーションエラーが発生します。char *src_str = "C programming language"char *dst_str

4

4 に答える 4

8

間違った方向にコピーすることに加えて、whileループの最後にセミコロンがありません。

char *strcpy_(char *dest, char *src) {
    char *orig = dest;
    while((*dest++ = *src++)!= '\0')
        ; // <<== Very important!!!
    return orig;
}

空のステートメントを表すセミコロンがない場合、最初の文字をコピーした後に実行returnしますが、これはもちろん正しくありません。

最後に、次のように、ループのヘッダーでゼロのチェックをスキップできます。

while(*dest++ = *src++)
    ;
于 2013-01-07T18:56:17.807 に答える
1

ソース文字列を宛先文字列で上書きします。あなたはおそらくそれを逆にしたいでしょう:

(*dst++ = *src++)
于 2013-01-07T18:55:25.870 に答える
0

その逆ではなく、srcにdstを割り当てています。

于 2013-01-07T18:55:01.463 に答える
0

にコピーdestしているようですsrc! より適切な関数プロトタイプを使用していた場合、コンパイラはこの間違いを見つけていたことに注意してください。

char * strcpy(char *dest, const char *src); // <<< note the `const` !!!

;for your while ループもありません。

于 2013-01-07T18:56:09.857 に答える