我有这个小程序:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 30
void inverti (char s);
int main ()
{
char str[SIZE+1];
gets(str);
printf ("Your imput: ");
puts(str);
invert(*str);
printf ("It works!");
return 0;
}
void invert (char s)
{
int i;
for (i = 0; i < SIZE + 1; i++)
{
if (isupper(str[i]))
str[i] = tolower(str[i]);
else if (islower(str[i]))
str[i] = toupper(str[i]);
}
puts(str);
}
Run Code Online (Sandbox Code Playgroud)
那是错误吗?为什么我不能传递str给我的功能?
In function ‘main’:|
warning: passing argument 1 of ‘inverti’ makes integer from pointer without a cast [enabled by default]|
note: expected ‘char’ but argument is of type ‘char *’|
In function ‘invert’:|
error: ‘str’ undeclared (first use in this function)|
note: each undeclared identifier is reported only once for each function it appears in|
||=== Build finished: 3 errors, 1 warnings ===|
Run Code Online (Sandbox Code Playgroud)
pb2*_*b2q 12
您的代码至少有3个问题.
首先,与您的具体问题最相关的是,您已将函数的参数声明为单个字符:char.要传递C字符串,请将参数声明为char *- 指向字符的指针也是用于C字符串的类型:
void invert(char *str)
Run Code Online (Sandbox Code Playgroud)
传递参数时你不需要取消引用:
invert(str);
Run Code Online (Sandbox Code Playgroud)
另请注意,您在函数原型中错误地键入了函数的名称:您已在其中调用它inverti.原型中的名称必须与代码中稍后的函数定义中的名称匹配.
您还需要更改已更正和重命名的函数原型中的参数类型:
void invert(char *str);
Run Code Online (Sandbox Code Playgroud)
您的代码还有一个问题:您正在使用字符串迭代SIZE.SIZE是数组的最大大小,但不一定是字符串的大小:如果用户只输入5个字符,该怎么办?您应该查看并使用该函数strlen来获取实际长度,并且在循环中,只迭代字符串的实际长度.
| 归档时间: |
|
| 查看次数: |
24510 次 |
| 最近记录: |