プログラムのコードは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * cloning(char * q){
char s[strlen(q)];
int i;
for(i = 0; i < strlen(q); i++)
s[i] = q[i];
return s;
}
int main(){
char q[] = "hello";
char *s = cloning(q);
return 0;
}
コンパイル後に警告が表示されるので、戻り値を次のように変更しました。
char *b = s;
return b;
このようにして、警告を解決できます。ただし、関数 cloning() 内では、sizeof(s) は 5 ですが、strlen(s) は 7 であることがわかりました。また、char s[strlen(q)] を単純に char s[5] に変更しても、出力は引き続き正しくない。誰でもこの問題を説明できますか? どうもありがとうございました。