-3

私が間違っていることを教えてください

//I'm trying to get the number of the month by sending its name.
#include <stdio.h>

私の機能

int monthstr2num (char month[]){                                                


if (month == "September")
    return 8;


}

int main (){
char month []={"September"};
int num;

num = monthstr2num (month);//func call

37814040のような間違った出力を表示します

printf ("%d", num);

return 0;
}
4

4 に答える 4

3

あなたの問題は2つの場所にあります。

1つ目は==、文字列を比較するために使用している場所です。これはCでは不可能です(これは未定義の動作であり、コンパイルされますが、必要な処理は実行されません)。と呼ばれるCライブラリの関数を使用する必要がありますstrcmp。にあり、次のstring.hように使用できます。

if(strcmp(month,"September")==0)
    return 8;

また、そのifステートメントがfalseを返す場合は、ifステートメントの外部で別のリターンを取得する必要があります。return 0;

于 2012-09-28T18:57:34.163 に答える
1

このコードには2つの問題があります。

1)(month == "September")実際のデータではなくポインタを比較します

2)(month == "September")falseの場合、この場合のreturnステートメントがないため、関数はガベージを返します。

于 2012-09-28T18:53:15.383 に答える
0
if (month == "September")

間違っている。を使用しstrcmpます。これがコンパイルされることに少し驚いていますが(配列/ポインターの微妙な点が完全ではないため)、これら2つのエンティティのメモリアドレスをポインターとして比較することになります。

于 2012-09-28T18:51:51.703 に答える
0

==文字列の比較には使用しないでください。C文字列は、char *であり==、ポインタを比較します。

C標準ライブラリは、C文字列を比較するための関数を提供しstrcmpます#include <string.h>

于 2012-09-28T18:52:09.080 に答える