2017-02-09 36 views
0

這裏是一個反轉C中字符串的簡單代碼,最後一個printf語句打印反向順序,但在最後有一個問號,而我只是想打印反轉的字符串而不是問題標記 我該如何解決它?printf結尾的問號

#include<stdio.h> 
#include<string.h> 
int main(){ 
char new_string[100]; 
char string[100]; 
scanf("%s",string); 
printf("original_number = %s\n",string); 
int i; 
int l = strlen(string)-1; 

for(i = 0; i<=l; i++){ 
new_string[i] = string[l-i]; 
printf("%c\n",new_string[i]); 
    } 
printf("rev_number = %s\n",new_string); 
} 

輸入:ABCD

輸出: original_number = ABCD

d

Ç

b

一個

rev_number = dcba?

+1

'炭new_string [100];' - >'炭new_string [100] = {0};' – BLUEPIXY

+0

哇! ,它的工作,你能告訴我背後的邏輯,char new_string [100] = {0}; –

+0

由於'new_string'尚未初始化,所以會顯示垃圾。有必要事先用0初始化,或者在字符串後添加空終止符(「'\ 0'')。 – BLUEPIXY

回答

3

你需要null來終止你的字符串。 將此行添加到反向字符串的for循環之後。

new_string[i]='\0';

for(i = 0; i<=l; i++){ 
    new_string[i] = string[l-i]; 
    printf("%c\n",new_string[i]); 
} 
new_string[i]='\0'; // add this 
printf("rev_number = %s\n",new_string); 

check-here

0

如果問題是「如何添加'?'到字符串的結尾?「我要回答:

1)使用strcat添加一個或多個字符,例如:

#include<stdio.h> 
#include<string.h> 
int main(){ 
    char new_string[101] = {0}; // +1 to be sure that enough place for '?' will be available 
           // {0} to init empty string 
    char string[100]; 
    scanf("%s", string); 
    printf("original_number = %s\n", string); 
    int i; 
    int l = strlen(string) - 1; 
    for (i = 0; i <= l; i++){ 
     new_string[i] = string[l - i]; 
     printf("%c\n", new_string[i]); 
    } 
    strcat(new_string, "?"); 
    printf("rev_number = %s\n", new_string); 
} 

2)把?和循環結束後添加字符\0,如:

#include<stdio.h> 
#include<string.h> 
int main(){ 
    char new_string[101]; // +1 to be sure in place for '?' 
    char string[100]; 
    scanf("%s", string); 
    printf("original_number = %s\n", string); 
    int i; 
    int l = strlen(string) - 1; 
    for (i = 0; i <= l; i++){ 
     new_string[i] = string[l - i]; 
     printf("%c\n", new_string[i]); 
    } 
    // add one more char 
    new_string[i] = '?'; 
    // set the string end 
    new_string[i + 1] = '\0'; 
    printf("rev_number = %s\n", new_string); 
} 

請注意,如果用0填充所有數組作爲char new_string[101] = {0};,則不需要將末尾字符串與new_string[i + 1] = '\0';相加,因此如果初始化與第一次相同,則第二個變體可以更短t的一

對於片段我有相同的輸出

enter image description here

UPDATE:在處理字符串

還有一個建議。當輸入與scanf製成,你知道多少字符可以被存儲在您的字符數組中使用下面的方法來防止違反數組邊界

char string[10]; // if you have 10 bytes 
scanf("%9s", string); // ask not more than 9 characters 

的記住,你需要「\ 0」多一個字節(空終止符)。

-1

問題是你正在服用「字符串的結束」作爲在loop.you不需要變量「L」最後的輸入。可以做一些這樣認爲

int main() 
{ 
    char new_string[100]; 
    char string1[100]; 
    scanf("%s",string1); 
    printf("original_number = %s\n",string1); 
    int i; 


    for(i = 0; i<=strlen(string1); i++){ 
    new_string[i] = string1[i-1]; 

    printf("%c\n",new_string[i]); 
     } 
    printf("rev_number = %s\n",new_string); 
} 
0

通過new_string終止new_string [I] = '\ 0' 後的for循環