我正在尝试反转 C 中的字符串。 reverse 函数只是将给定位置(在 for 循环中)的字符分配给临时对象。我在程序中看不到任何逻辑错误,并且程序在 gcc 4.7.2 下使用以下命令成功编译:
gcc -Wall -std=c99 reverse.c
要重现问题:
1.) 运行程序并在你的 shell 中输入一个字符串
2.) 输入完成后,按 enter/and 或您的 EOF 信号。
问题是既没有打印原始字符串,也没有打印反向字符串。这也是 K&R 第二版的一个练习,如果你完成了这个练习,将不胜感激我的不同解决方案。
我认为该错误是由于缺少空字符引起的,著名的 printf 需要以空字符结尾的字符串才能将输入打印到 cin。getline 函数将空字符分配给数组的末尾,当然空字符将是字符串中的第一个字符,以结束 printf(因此不打印字符/文字)。
#include <stdio.h>
#define MAXLINE 1000
int geline(char s[], int lim);
void reverse(char line[], int length);
int main()
{
char s[MAXLINE];
char t[MAXLINE];
int k, len;
while ((len = getline(s, MAXLINE)) > 0) {
if (len > 1)
reverse(s, len);
}
printf("%s", s);
return 0;
}
void reverse (char input[], int length)
{
char temp[MAXLINE];
int j = length;
for (int i = 0; i < length; ++i, --j) {
temp[i] = input[i];
input[i] = input[j];
input[j] = temp;
}
}
int getline(char s[], int lim)
{
int c, i;
for (i=0; (c=getchar()) != EOF && c!='\n'; ++i)
s[i] = c;
if (c== '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}