printf的在Ubuntu不工作
所以我被要求写在同一时间反转其输入行的程序,这就是我基本上想出了:printf的在Ubuntu不工作
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int getLine(char s[], int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
int reverse(char line[], char reverse[])
{
int i, j;
for (i = 0, j = strlen(line); i < strlen(line); i++, j--) {
reverse[i] = line[j];
}
return 0;
}
int main()
{
int len;
char line[MAXLINE];
char rev[MAXLINE];
while (len = getLine(line, MAXLINE) > 0) {
reverse(line, rev);
printf("%s\n", rev);
}
return 0;
}
据我所知它的罚款和应该能够正常工作,但是当我运行它时,即使下一行被打印出来,那里也没有反转的字符串! 同样的问题仍然存在于其他程序以及我需要打印字符串,我不知道如果我应该问askubuntu
论坛上的问题或在这里,所以我先在这里给它一个镜头!
在反转功能中,您错过了复制'\0'
的字符。这可能会导致printf不打印字符串。请记住,strlen给出的长度没有'\0'
。
修改反函数应该是这样的:
int reverse(char line[], char reverse[])
{
int i, j;
for (i = 0, j = (strlen(line)-1); i < strlen(line); i++, j--) {
reverse[i] = line[j];
}
reverse[i] = '\0'
return 0;
}
我认为问题是,第一次迭代复制索引为'0'的终止符,所以它是一个空字符串,后面是反向字符串。请注意'line [strlen(line)]'是0结束符。 – mch
仍然无法使用! –
嗯,我会尽力回复你,谢谢:) –
你认为这个问题是'的printf()'或'用反向()'?如果它是'printf()',为什么你在这个问题中包含'reverse()'?如果它是'reverse()',为什么标题引用'printf()'?用'printf()'写出可以显示你的问题的最短程序,或者想一想你的'reverse()'函数。 – slim
我很确定它会是'lim - 1'。 –