関数から文字列を渡し、コピーし、他の文字列と連結してmain関数に表示しようとしています。しかし、私は必要な答えを得るためにstrcpyとstrcatコマンドを複製する必要があります。関数から文字列を取得することができず、strcpyとstrcatコマンドの重複を表示しません。
MY警告:
Test1.cに:15:1:警告:関数は、ローカル変数のアドレスを返し[-Wreturnローカル-ADDR]
Test1.cに:22:9:警告:合格「strcpyの」は、引数1、ポインタのターゲットタイプから
/usr/include/string.h:125:14「をCONST」修飾子を破棄します。注:「'* を制限シャア期待が、引数は型であるのconstのchar * '
テスト1.c:23:9:警告: 'strcat'の引き数1がポインターのターゲットタイプから 'const'修飾子を破棄する
/usr/include/string.h:133:14:注:期待される 'char * を制限する 'は、引数の型は 'でのconstのchar *'
Test1.cに:31:3:警告:リターン破棄 'ポインタのターゲット型からのconst' 修飾子
Test1.cに:31:3:警告:関数はローカル変数のアドレスを返す[-Wreturn-local-addr]
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *return_string(int number) {
char out1[5] = "";
switch (number) {
case 1: strcpy(out1, "hi"); break;
case 2: strcpy(out1, "how"); break;
case 3: strcpy(out1, "are"); break;
case 4: strcpy(out1, "you"); break;
case 5: strcpy(out1, "?"); break;
}
return out1;
}
char *decimal_to_string (int dec_number) {
int num = dec_number;
char const final_str[12] = "Hi ", tmp_str[12] = ""; // result
strcpy(tmp_str, return_string(num));
strcat(final_str, tmp_str);
strcpy(tmp_str, return_string(num));
strcat(final_str, tmp_str);
printf("direct return string: %s\n", return_string(num));
printf("return string: %s\n", final_str);
return final_str;
}
int main() {
int num = 3;
const char *szSomeString = decimal_to_string(num);
printf("%s", szSomeString);
return 0;
}
ローカル配列 'out1'を返すと、未定義の動作が発生します。 gccのための –
:警告を読んでください:それは便利です。私たちにあなたのコードを手作業でコンパイルしようとするのではなく、あなたの質問に警告を掲示しておけば便利だろう。 –