Code to Reverse String不清除以前的值

时间:2016-01-20 12:24:05

标签: c string

我正在编写这个编程问题,我在10个测试用例中有大约30个字符的反向字符串。

我的代码是: -

#include <stdio.h>
#include <string.h>


int main () {

    int t;
    scanf("%d",&t);

    while (t--) {
        char str[30];

        scanf("%s",&str);

        char revStr[30];

        int len = strlen(str);
        int i = 0;
        int j = len-1;

        while (i < len) {
            revStr[i] = str[j];
            i++; j--;
        }

        printf("%s\n",revStr);
    }

    return 0;
}

如果输入字符串大于前一个字符串,则输出会出现乱码。

例如,

如果last-string6个字符,例如rocket\0new-stringfun\03个字符,则输出为{{ 1}}。

3 个答案:

答案 0 :(得分:1)

char str[30];
scanf("%s",&str);
           ^ don't pass address of array 

这会起作用 -

scanf("%29s",str);

答案 1 :(得分:0)

试试这个:

int t;     scanf(&#34;%d&#34;,&amp; t);

while (t--) 
{
    char str[30] = { 0 };

    scanf("%s", &str);

    char revStr[30] = { 0 };

    int len = strlen(str);
    int i = 0;
    int j = len - 1;

    while (i < len) {
        revStr[i] = str[j];
        i++; j--;
    }

    printf("%s\n", revStr);
}

答案 2 :(得分:0)

您需要进行两项更改

首先将scanf("%s",&str);更改为

scanf("%s",str);

其次,在while循环之后,您没有创建最后一个元素rev字符串\0。在printf语句之前添加这一行。

revStr[i] = '\0';

这可以解决您的问题。