-3

以下のコード印刷

文字列は次のとおりです。

なぜだか分からない?

#include<stdio.h>
char *func(){
    char str[1024];
    return str;
}
int main()
{
  char *g="string";
  strcpy(func(),g);
  g = func();
  strcpy(g,"oldstring");
  printf("The string is : %s",func());
  return 0;
}
4

2 に答える 2

0

1つ目xxxは、関数のローカル配列ですgxxx()。関数の終了後に文字列をこの配列にコピーしようとすると、未定義の動作が発生します。

strcpy(g,"oldstring");2番目:結果を印刷する前に実行していることがわかります。何を期待しましたか?

于 2013-03-20T16:14:18.793 に答える
0

述べたように:スタックに割り当てられたローカル変数を返しています。変数は、戻った瞬間に存在しなくなります。ただし、スタックはクリアされないため、動作します。

gヒープに割り当てる必要があります。そのためには:

void gxxx(char* xxx){

    //do sone stuff to xxx 
    return;
}

char *g = malloc(/*some size*/);
gxxx(g);
free(g);
于 2013-03-20T16:12:40.857 に答える