我想打印月份名称,这是一个数组元素(从函数返回指针...)
这是我的功能:
/*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();
}
答案 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'