C语言 输出 问号

#include<stdio.h>#definemaxline1000voidreverse(charori[],charrev[],intlen);intlength(... #include <stdio.h>
#define maxline 1000

void reverse(char ori[], char rev[], int len);
int length(char line[]);

int main()
{
int len;
char ori[maxline];
char rev[maxline];
len = length(ori);
reverse(ori, rev, len);
printf("the reverse line is:\n %s", rev);
}

void reverse(char ori[], char rev[], int len)
{
int i;
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
rev[++i] = '\n';
rev[++i] = '\0';
}

int length(char line[])
{
int c, i;
for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;
if (c == '\n')
{
++i;
line[i] = c;
}
++i;
line[i] = '\0';
return i-2;
}

想写反转一行的program;
输入test
输出的是 tset烫

想知道为什么会有这个空格和烫
之前用rev[len+1]='\n'和rev[len+2]='\0'时则出现了问号 搞不懂原因啊
展开
 我来答
share_fun1
2014-02-14 · TA获得超过610个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:366万
展开全部
空格的原因是printf("the reverse line is:\n %s", rev);这句里面有一个空格(你的格式是换行后空格输出 所以有一个空格)

至于烫的原因 是
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
是当i=0的时候引用了ori[-1]是位置的内存,所以出现的
改为
for (i = 1; i <= len; ++i)
rev[len - i] = ori[i - 1];
就行了

ps:你用的是Windows编译器 谢谢采纳
更多追问追答
追问
i=0改成i=1还是有烫啊
而且i=0之后有++1 所以i-1不会是-1的
追答
怎么不会啊
++i是循环里面最后才执行的啊
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
相当于
i=0;
while(l<=len) {
rev[len - i] = ori[i - 1];
++i;
}
//刚刚少了一句
rev[++i] = '\n';
rev[++i] = '\0';
改为
rev[len] = '\n';
rev[++i] = '\0';
即可
White_MouseYBZ
2014-02-14 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6614万
展开全部
改了下,你对照看……
#define maxline 1000
void reverse(char ori[], char rev[], int len){
int i;
for(i=0; i<len; ++i)
rev[len - i-1] = ori[i];
rev[len] = '\0';//后面有个"烫"就是这里没有弄对.

}

int length(char line[]){
int c, i;
for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;
++i;
line[i] = '\0';
return i-1;
}

void main(void){
int len;
char ori[maxline];
char rev[maxline];
len = length(ori);
reverse(ori, rev, len);
printf("the reverse line is:\n%s", rev);//前面一个空格是你在%前加入了' '
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lishimin1972
2014-02-14 · TA获得超过741个赞
知道小有建树答主
回答量:391
采纳率:0%
帮助的人:453万
展开全部
for (i = 0; i <= len; ++i)错了,
应该for (i = 0; i < len; ++i)
追问
改成<还是不对啊 还出现了新的乱码
输入test 返回蘳et?
追答
#include <stdio.h>
#define maxline 1000
void reverse(char ori[], char rev[], int len)
{
    int i;
    for (i = 0; i < len; ++i)
        rev[len-1 - i] = ori[i];
    rev[len]=0;
}
int length(char line[])
{
    int c, i;
    for (i = 0; ; ++i)
    {
        c = getchar();
        if (c== EOF || c == '\n') break;
        line[i] = c;
    }
    line[i] = 0;
    return i;
}
int main()
{
    int len;
    char ori[maxline];
    char rev[maxline];
    len = length(ori);
    reverse(ori, rev, len);
    printf("the reverse line is: %s\n", rev);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式