我是一个新手程序员。我用C写了这个程序,它接受一个字符串输入,然后反转它。然而,当它打印结果时,它给出了一些垃圾值和字符串本身的截断版本。我不知道出了什么问题,有线索吗?
#include <stdio.h>
#include <string.h>
char s[50] = "";
int start;
int tmp = 0;
int len;
int i;
int end;
printf("Enter String: ");
fgets(s, 99, stdin);
len = strlen(s);
printf("String Length is: %i\n", len);
end = len - 1;
for (start = 0; start <= end; start++)
{
tmp = s[end];
s[end] = s[start];
s[start] = s[tmp];
end--;
}
printf("Reversed String Is: ");
for (i = 0; i <= len; i++)
putchar(s[i]);
}
例如:字符串“a man my son”返回“nam a”。
我尝试改变增量值,但没有效果。
我还添加了一个printf语句,用于打印字符串长度,显示正确的值。
3条答案
按热度按时间j8yoct9x1#
正如在注解中已经指出的,您有两个拼写错误,第一个错误是字符数组
s
是用50
元素声明的但是在
fgets
的调用中指定了值
99
而不是50
。第二点是在这份声明中
赋值运算的右操作数不正确。您必须改为
还有其他的问题,例如函数
fgets
可以在输入字符串后添加一个新的行字符'\n'
,在反转字符串之前应该将其从字符串中删除。同样,一般来说,你应该使用
size_t
类型来代替int
类型来表示字符串长度,它是strlen
函数的返回类型。程序可以看起来像下面这样。
程序输出可能如下所示
如果您不想更改保持字符串长度的变量
n
,那么for循环可以如下所示请注意,您应该始终在使用变量的最小作用域中声明变量。
我也建议你看看我对以下问题的回答。我希望它对你有用。试图扭转C字符串,但它不工作
nbysray52#
这将按您的预期工作。请参阅我的//评论。
axr492tv3#