2017-02-09 211 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循环