2016-08-11 5 views
0

でC言語で関数から文字列を返すは、パラメータ4

#include<stdio.h> 
char* day(int); 
int main() 
{ 
    int num; 
    char *p; 
    printf("Enter the day \n"); 
    scanf("%d",&num); 
    p=day(num); 
    printf("%s",*p); 
    return 0; 
} 

char *day(int num) 
{ 
    char *str; 
    switch(num) 
    { 
    case 1: *str="MONDAY"; 
      break; 
    case 2: *str="TUESDAY"; 
      break; 
    case 3: *str="WEDNESDAY"; 
      break; 
    case 4: *str="THURSDAY"; 
      break; 
    case 5: *str="FRIDAY"; 
      break; 
    case 6: *str="SATURDAY"; 
      break; 
    case 7: *str="SUNDAY"; 
      break; 
    } 
    return str; 
} 

以下のコードを見てください、私はAを作成しているこれを達成するために、私は、上記のプログラムでは週の日を印刷しようとしています関数の日()は、ユーザーからの番号を受け入れ、日のアドレスを返しますが、上記のプログラムは動作していません。私は問題が何であるか分からない。誰も私はこの問題を解決するのを助けることができますか?

+0

printf( "%s"、p); – masternone

答えて

1

あなたはポインタのファンダメンタルズについてBasic Pointer Operationsを通じてポインタ

ゴーを通じて内容を割り当てているように、一日の機能にSTRから「*」を削除します。

#include<stdio.h> 


    char* day(int); 
    int main() 
{ 
    int num; 
    char *p; 
    printf("Enter the day \n"); 
    scanf("%d",&num); 
    p=day(5); 
    printf("%s",p); 
    return 0; 
} 

    char* day(int num) 
{ 
    char* str; 
    switch(num) 
{ 
    case 1: str="MONDAY"; 
      break; 
    case 2: str="TUESDAY"; 
      break; 
    case 3: str="WEDNESDAY"; 
      break; 
    case 4: str="THURSDAY"; 
      break; 
    case 5: str="FRIDAY"; 
      break; 
    case 6: str="SATURDAY"; 
      break; 
    case 7: str="SUNDAY"; 
      break; 
    } 

    return str; 
} 

私はあなたが '*' なしprintf("%s" p)を使用したい

+0

ポインタが指す値にアクセスする必要があるので、* pを使用していないのはなぜですか? –

1

....それはあなたに意味を成しません願っています。

* pは、pに格納されているアドレスの値を意味します。 pはcharポインタなので、これを使用すると、単一のcharをprintfに渡すだけです。

'*'を使用しない場合は、文字列が始まるメモリ内のアドレスを渡しています。これにより、printfは文字列の終わり(ヌル文字、 '\ 0')に達するまで、最初の文字、次に2番目の文字、3番目の文字などが出力されます。
また、文字列をcharポインタに代入しているときに、そこに '*'を使用したくない場合もあります。作業コードについてはMaharajsの答えを参照してください。

関連する問題