从参数为4的c函数返回一个字符串

时间:2016-08-11 12:02:34

标签: c function pointers c-strings

请查看以下代码

#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;
}

我试图在上面的程序中打印一周中的日子以实现这一点我创建了一个函数day(),它将接受来自用户的号码并返回当天的地址但是上面的程序没有用。我不知道是什么问题。谁能帮我解决这个问题呢?

2 个答案:

答案 0 :(得分:1)

从str in day函数中删除&#39; *&#39; ,因为您通过指针分配内容

通过Basic Pointer Operations获取指针基础知识。

 #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;
 }

我希望它对你有意义......

答案 1 :(得分:1)

您希望在没有“*”的情况下使用printf("%s" p)

* p表示存储在p中的地址处的值。 p是一个char指针,所以如果你使用它,你只会将一个char传递给printf

如果不使用'*',则将内存中的地址传递给字符串。这允许printf打印第一个char,然后是第二个,然后是第三个,依此类推,直到它到达字符串的末尾(空字符'\ 0')。
此外,当您将字符串分配给char指针时,您也不想在其中使用“*”。有关工作代码,请参阅Maharajs答案。