使用printf打印C中的字符不打印

时间:2016-10-28 18:39:44

标签: c char printf

我有以下代码:

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

int main(void)
{
    char buff[50];
    int pass = 0;

    printf("\n Enter the password : \n");
    gets(buff);
    char str[80];
    strcat(str, "nw");
    strcat(str, "ww");
    strcat(str, "io");
    strcat(str, "oi");

    char str2[22];
    strcat(str2, "jm");
    strcat(str2, "qw");
    strcat(str2, "ef");
    strcat(str2, "io");
    strcat(str2, "nw");
    strcat(str2, "ce");
    strcat(str2, "or");
    strcat(str2, "ww");
    strcat(str2, "qf");
    strcat(str2, "ej");
    strcat(str2, "oi");


    if(strcmp(buff, str))
    {
        /*  we sf  as  df er fd xc yyu er we nm hj ui ty as asd qwe er t yu as sd df rt ty qw sd password    */

        printf ("\n Wrong Password \n");
    }

    else
    {
        printf ("\n Correct Password \n");
        pass = 1;
    }

    if(pass)
    {
        printf ("\n\n\n\n\n\n\n%s", str2);
    }

    return 0;
}

当我跑步时,我得到:

root@images:~# ./root.flag

 Enter the password :
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

 Wrong Password







Segmentation fault (core dumped)

它打印换行符但不打印str2中的值存储。如何让str2打印到屏幕上?我对C很新,所以我不知道为什么这不起作用。我很容易忽略这一点。

1 个答案:

答案 0 :(得分:5)

buff只有50个字符,但你输入131“A”,所以你有不确定的行为。 str2也只有22个字符,它需要为23,并且应该以'\ 0'NULL结束以打印它。  事实上,在它初始化之前你不应该对它进行严格的处理。试试str2[23] ={0};

函数strcat(str,new)查找字符串str的结尾,开始在new中添加字符。字符串的结尾定义为'\ 0'或零。您需要初始化局部变量以确保它们具有您想要的值。其代码为str1[80]={0};str2[23]={0};