2016-10-16 16 views
-2

C言語でパラメータとしてintを取得し、char配列(または文字列)を返す関数を記述しようとしています。Cの文字列の代わりにint値を返す関数

const char * month(int x) 
{ 
    char result[40]; 
    if(x<=31) strcpy(result,"can be a day of the month"); 
    else strcpy(result,"cannot be a day of the month"); 
    return result; 
} 

しかし、私の関数は文字列ではなくintを返します。私は人が似たような状況に遭遇したかもしれない投稿を読んだが、ポインタ型関数がどのように機能するのか、そしてそれらを私が望むものに戻す方法を理解できない(私はポインタについて少し説明している。彼らは一人で働いていますが、解決策をより効果的にするなど、いくつかの機能を追加するコードを書くことは一度もありません。)

+1

関数戻り失われます自動スコープを持つオブジェクトで 'result'。返されるポインタは無効で、逆参照は未定義の動作です。 –

+0

'result'は、関数が終了するときのスコープと寿命から外れます。このように多くのSOの質問があります。 –

+0

このCコードまたはC++コードですか? 2つの言語の答えは全く異なります。 –

答えて

1

これはCコードだと考えています。 (C++の場合はわかりません) ここでは、関数スコープの外側にresultを宣言し、使用している関数の中にポインタを渡します(にオーバーフローしないでください。)。あなたが使っているものでは、resultは破壊され、あなたはそれを使用することができません。

void month(int x, char* result) 
{ 
    if(x<=31) strcpy(result,"can be a day of the month"); 
    else strcpy(result,"cannot be a day of the month") 
} 

これは、何らかのエラーコードや必要なものを代わりに返すことができる唯一の提案でした。

+0

結果の値を格納するには、int main()で関数を呼び出すときにchar []型か文字列が必要ですか?私はそれが愚かな質問であることを知っていますが、私は前にポインタで作業していません。 – Stevie

+0

C言語ではなくC言語を使用していると仮定すると、C言語で文字列をサポートしていないので、char []を宣言する必要があります。 – Kiloreux

+0

それは完全に正常に動作します。ありがとう:) – Stevie

4
const char * month(int x) 
{ 
    char result[40]; 
    if(x<=31) strcpy(result,"can be a day of the month"); 
    else strcpy(result,"cannot be a day of the month"); 
    return result; 
} 

これは意味をなさない。配列へのポインタを返しますが、関数が返った後は、resultが関数のローカルなので配列は存在しません。 Cについて

:C++のため

const char * month(int x) 
{ 
    if(x<=31) return "can be a day of the month"; 
    return "cannot be a day of the month"; 
} 

std::string month(int x) 
{ 
    if(x<=31) return "can be a day of the month"; 
    return "cannot be a day of the month"; 
} 
関連する問題