为什么我无法使用此代码打印字母表?
void ft_putchar(char c)
{
write(1, &c, 1);
}
int print_alf(char *str)
{
int i;
i = 0;
while (str[i])
{
if (i >= 'A' && i <= 'Z')
ft_putchar(str[i]);
else
ft_putchar('\n');
i++;
}
return (str);
}
int main ()
{
char a[26];
printf("%s", print_alf(a));
return (0);
}
我收到此警告
format ' %s ' expects type 'char*' but argument 2 has type 'int'
如何使用字符串打印字母表并编写函数?
最佳答案
您的整个 print_alf
函数看起来很可疑。
- 您返回的
str
类型为char *
。因此print_alf
的返回类型应该是char *
而不是int
。 - 您的
while (str[i])
循环根本没有任何意义,因为您将未初始化的内存传递给它。因此,您的代码很可能会损坏内存,因为 while 循环将继续运行,直到在内存中找到'\0'
,而在传递的内存边界内不需要出现这种情况(a
)。 - 您没有在字符串末尾添加零终止字符 (
'\0'
)。这将导致printf("%s", print_alf(a));
打印从a
地址开始的尽可能多的字符,直到'\0'
在内存中找到。
以下是如何解决所有这些问题的建议:
char *print_alf(char *str, size_t len)
{
char letter;
if ((str) && (len >= 27)) // is str a valid pointer and length is big enough?
{
for (letter = 'A'; letter <= 'Z'; letter++) // iterate all characters of the alphabet
{
*str = letter;
str++;
}
*str = '\0'; // add zero termination!!!
}
else
{
str = NULL; // indicate an error!
}
return (str);
}
int main()
{
char a[26 + 1]; // ensure '\0' fits into buffer!
printf("%s", print_alf(a, sizeof(a)));
return (0);
}
关于c - 格式 "%s"需要 char* 等类型的参数,我只想打印字母表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32022274/