2016-01-20 48 views
-3

我正在做這個編程問題,其中有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-string,這是fun\0具有3字符,輸出的是funket\0

+1

數組名稱相當於第一個元素的地址,所以這個'scanf(「%s」,&str);'應該是'scanf(「%s」,str);'。 –

回答

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

只是這樣的工作 -

scanf("%29s",str); 
+0

對不起, t給我正確的答案 –

+0

@RakeshNarang在循環之後和打印'revStr' ** - > **'revStr [i] ='\ 0';'之前添加此行。 – ameyCU

0

試試這個:

INT噸; 012fscanf(「%d」,& 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); 
} 
0

你需要做出兩個改變

首先改變scanf("%s",&str);

scanf("%s",str); 

其次,while循環之後,你是不是做的最後一個元素rev\0。在printf語句之前添加此行。

revStr[i] = '\0'; 

這應該可以解決您的問題。