缺少最后一个角色

时间:2014-08-08 13:49:13

标签: c

我在不使用内置函数的情况下反转String。它扭转了每一个角色,但缺少了最后一个角色

这是程序

#include<stdio.h>
void main()
{
    char str[10],rev[10];
    int i,j,k;

    clrscr();

    printf("enter the string \n");
    scanf("%s",str);

    for(i=0;str[i]!='\0';i++)
        k=i-1;

    for(j=0;j<=i-1;j++)
    {
        rev[j]=str[k];
        k--;
    } 
    rev[j]='\0';

    printf("reverse=%s",rev);
    getch();
}

我不知道为什么最后一个Char缺失

2 个答案:

答案 0 :(得分:2)

k = i;

你错了。 您的表达式k = i-1;不会为整个反向字符串留出空间。

答案 1 :(得分:2)

计算字符串长度的代码缺少分号:

编译器将其解释为

for(i=0;str[i]!='\0';i++)
    k=i-1;

虽然意图可能已经

for(i=0;str[i]!='\0';i++)
    ;
k = i - 1;

Demo on ideone.

现在代码是&#34;工作&#34;,您应该修复可能导致未定义行为的错误:将输入的长度限制为scanf中的9个字符,如下所示:

scanf("%9s", str);

如果没有9,用户可以通过输入超过9个字符来导致未定义的行为,并溢出您的10字节缓冲区。