今天在使用mallco()和strlen()時,分配的空間總是大于需要的空間,導致輸出總是亂碼。

如果把strlen()改成sizeof()的話,會顯示未加載wntdll.pbd或者是VS沒有反應。

int main()
{
/*const char* flag;
char* outflag;
flag = "ZmxhZ3tzaG91a2FrdX0=";
outflag = (char*)malloc(BASE64_DECODE_OUT_SIZE(strlen(flag)));
base64_decode(flag, strlen(flag), outflag);
puts(outflag);
free(outflag);
return 0;*/
char* flag;
flag = "ZmxhZ3t9CgoK";
char* outflag = (char*)malloc(strlen(flag));
for (int i = 0; i < strlen(flag); i++)
{
outflag[i] = flag[i] ^ 1;
}
puts(flag);
puts(outflag);
free(outflag);
return 0;
}
想問一下各位大佬,應該怎么解決這個問題
uj5u.com熱心網友回復:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
/*const char* flag;
char* outflag;
flag = "ZmxhZ3tzaG91a2FrdX0=";
outflag = (char*)malloc(BASE64_DECODE_OUT_SIZE(strlen(flag)));
base64_decode(flag, strlen(flag), outflag);
puts(outflag);
free(outflag);
return 0;*/
int i;
char* flag;
flag = "ZmxhZ3t9CgoK";
char* outflag = (char*)malloc(strlen(flag) + 1);
for (i = 0; i < strlen(flag); i++)
{
outflag[i] = flag[i] ^ 1;
}
outflag[i] = 0; //add '\0'
puts(flag);
puts(outflag);
free(outflag);
return 0;
}
供參考~
注意'\0',出現亂碼,對于字串而言,大部分都是因為'\0'導致(沒在對應的字串結尾加上'\0'導致)
uj5u.com熱心網友回復:
字串要有結束符'\0',否則就會一直輸入記憶體資訊直到遇到字串結束符所以
puts(flag);
outflag[strlen(flag)] = '\0'; //這里追加設定字串結束符
puts(outflag);
另外,flag[i] ^ 1 有可能導致運算結果是非顯示字符,這樣outflag顯示的內容也不一定能看得到
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/211482.html
標籤:C語言
上一篇:【求助】買的qq號在一星期內被找回了,有沒有什么手段拿回來
下一篇:斐波那契數列求呼叫函式的次數
