以下のコード印刷
文字列は次のとおりです。
なぜだか分からない?
#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;
}
以下のコード印刷
文字列は次のとおりです。
なぜだか分からない?
#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;
}
1つ目xxxは、関数のローカル配列ですgxxx()。関数の終了後に文字列をこの配列にコピーしようとすると、未定義の動作が発生します。
strcpy(g,"oldstring");2番目:結果を印刷する前に実行していることがわかります。何を期待しましたか?
述べたように:スタックに割り当てられたローカル変数を返しています。変数は、戻った瞬間に存在しなくなります。ただし、スタックはクリアされないため、動作します。
gヒープに割り当てる必要があります。そのためには:
void gxxx(char* xxx){
//do sone stuff to xxx
return;
}
char *g = malloc(/*some size*/);
gxxx(g);
free(g);