如何打印从函数返回的数组元素作为指针?

时间:2015-07-31 07:44:59

标签: c

我想打印月份名称,这是一个数组元素(从函数返回指针...)

这是我的功能:

/*I have taken this from book by Dennis Ritchie*/
/* month name : return name of n-th month */
char *month_name(int n){
     static char *name[] = {
     "illegal month","January","February","March","April","May","June","July",
     "August","September","October","November","December"};
return (n < 1 || n > 12) ? name[0] : name[n];
}

现在我无法在main()函数中收集此指针。我试过这种方式

void main(void)
{
 int k = 0, i = 0;
 char *s;
 printf("Enter month number\n");
 scanf("%d",&k);

 s = month_name(k);
 for(i = 0; *(s+i) != '/0'; i++)
      printf("%c",*(s+i));
 getch();
}

3 个答案:

答案 0 :(得分:2)

它无效的原因是因为以下内容不正确

class Foo
{
public:
    void DoSomething()
    {
         // if(IsASomething()) ...
         // or
         // if(IsSomething(a_)) ...
private:

    int* a_;
    int* b_;

    static bool IsSomething(int* n) {return n != null;}

    bool IsASomething() const { return a_ != null;}
    bool IsBSomething() const{ return b_ != null;}
};

你想要实现的目标是停止null终止符。然而!代码中的null终止符不正确。

请更改为以下内容:

{{1}}
  

空终结符=&#39; \ 0&#39;。你写了&#39; / 0&#39;。

答案 1 :(得分:1)

您可以像其他人已经建议的那样纠正空错误。

但是,如果您不介意替代方法,因为您的函数返回字符串,您可以使用%s格式说明符直接打印,例如< / p>

 printf("Month is %s\n", month_name(k));

或者,当您直接打印字符串时,您也可以写

  puts(month_name(k)));

请注意,void main(void)不是main()的有效签名,正如标准规定的那样。您应该使用int main(void)代替。

答案 2 :(得分:0)

您可以简单地使用:

int main(void)
{
   int k = 0, i = 0;
   char *s;
   printf("Enter month number\n");
   scanf("%d",&k);

   printf("%s\n", month_name(k));

   return 0;
}

如果您只想更正代码:

 for(i = 0; *(s+i) != '\0'; i++)
      printf("%c",*(s+i));

正如您所见,空终止是'\0'而不是'/0'

相关问题