【发布时间】:2010-09-02 13:33:02
【问题描述】:
我正在使用 Linux。 我正在尝试用 c 编写一个程序,该程序将向后打印一个字符串。 这是我的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (){
char string[100];
printf ("Enter string:\n");
gets (string);
int length = strlen (string)-1;
for (length = length; length>=0; length--){
puts (string[length]);
}
}
这是错误:
a.c:10: warning: passing argument 1 of ‘puts’ makes pointer from integer without a cast
/usr/include/stdio.h:668: note: expected ‘const char *’ but argument is of type ‘char’
/tmp/cc5rpeG7.o: In function `main':
a.c:(.text+0x29): warning: the `gets' function is dangerous and should not be used.
我该怎么办?
【问题讨论】:
-
我个人也不会使用
length变量作为您的循环计数器变量。这很令人困惑。除非您在内存中遇到问题,否则只需声明一个 int 或 char 计数器变量。 (此处可以使用 char,因为长度最多为 100)。 -
@Stephen:只需使用
int。使用char通常不会节省内存,因为编译器会将其填充到寄存器中,而不是将其保存到内存中。并且编译器可能会将length优化掉。 -
您可以省略 for 循环中的第一个子句。
length=length毫无意义。for( ; length>=0; length--) {...} -
@Philip:我认为抱怨是变量
length最好重命名为i或index或pos或类似的东西,因为虽然它被初始化为长度,它实际上用作数组索引,而不是任何东西的长度。 -
@Stephen:如果有人有足够的内存用于标准库,那么(本地,偶数)char 与 int 的重要性有多普遍?此外,如果您在循环开始时说“i = length - 1”并且不再使用长度,编译器很可能会将其优化掉。 [编辑:其他人似乎打败了我。 :)]