我有以下代码:
#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很新,所以我不知道为什么这不起作用。我很容易忽略这一点。
答案 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};