printf末尾的问号

时间:2017-02-09 06:32:49

标签: c string

这是一个在C中反转字符串的简单代码,最后一个printf语句打印相反的顺序,但最后有一个问号,而我只是想打印反向字符串而不是问号 我该如何解决?

stk

输入:abcd

输出:   original_number = abcd

d

C

B'/ P>

rev_number = dcba?

4 个答案:

答案 0 :(得分:4)

你需要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

答案 1 :(得分:0)

如果问题是&#34;如何添加&#39;?&#39;到字符串的末尾?&#34;我得回答:

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';添加字符串结尾,因此第二个变体可以更短初始化与第一个一样

对于两个片段,我都有相同的输出

enter image description here

<强>更新

关于使用字符串的另一个建议。当使用scanf输入并且您知道可以在字符数组中存储多少字符时,请使用以下方法来防止违反数组边界

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

请记住,对于&#39; \ 0&#39;还需要一个字节。 (null终止符)。

答案 2 :(得分:0)

通过new_string [i] =&#39; \ 0&#39;终止new_string在for-loop之后

答案 3 :(得分:-1)

问题是你把“字符串结束”作为for循环中的最后一个输入。你不需要变量“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);
}