私は、次のようなソース コードを c で作成しています。
char *get_str() {
char *str;
int slen=get_strlen();
str=(char *)malloc(sizeof(char)*slen);
set_str(str);
printf("returning str %s with len %d\n", str, strlen(str));
return str;
}
int main() {
char *str=get_str();
printf("recieved str %s with len %d\n", str, strlen(str));
}
そして、次の出力が得られます。
returning str hi with len 2
received str with len 0
これは私を夢中にさせています。「strを返す」ステートメントには正確に必要なものがありますが、「受け取ったstr」はnullを返し続けます。slen がゼロでないことを確認しました。文字列を設定する関数は、大規模で広く使用されているソフトウェア パッケージの一部であるため、文字列を正しく設定すると見なすことができます。
編集:
以下で指摘されているように、ここに示されている情報は問題を解決するのに十分ではありませんでした。関数 get_str が別のソース コード ファイルにあることも指摘する必要がありました。問題は、ヘッダーに get_str() の行を追加するのを忘れたことでした。これは、 alk と Nitzan Shaked が以下で正しく推測したものです。これは、get_str が整数を返すと仮定した ansic コンパイラを使用しているため、コンパイル エラーにはなりませんでした。