看似小事,卻極易寫錯

2021-06-29 15:29:52 字數 1336 閱讀 7076

#include #include void main(int argc, char** argv)

file * fp = fopen(argv[1], "r");

if(fp == null)

fseek(fp, 0, seek_end);

long fszie = ftell(fp);

fseek(fp, 0, seek_set);

if(fszie == -1)

char* sz_str = new char[fszie+1];

sz_str[fszie] = '\0';

if(fread(sz_str, 1, fszie, fp) <= 0)

std::string text = sz_str;

std::string output_str = "";

int i = 0;

while(sz_str[i] != '\0')

break;

}else if(sz_str[i] == '\n')//換行符 break

break;

//處理空格和tab

if(sz_str[i] == ' ')

output_str += " ";

else if(sz_str[i] == '\t')

output_str += "    ";

else if(sz_str[i] != 0xcd)

output_str += sz_str[i];

i++;

} if(sz_str[i] == '\0')

break;

else //碰到換行符了

} output_str += "

"; fclose(fp);

fp = fopen(argv[1], "w");

if(fp == null)

fwrite(output_str.c_str(), output_str.size(), 1, fp);

fclose(fp);

}

就錯在了
else if(sz_str[i] != 0xcd)
這一行 我用偵錯程式看了變數值明明就是0xcd啊,那是為何呢?後來理了理頭緒,改為 else if(sz_str[i] != (char)0xcd) 就好了

因為之前**表示式 由char提公升為int ,結果sz_str[i]提公升為int會變成乙個負數, 而0xcd會變成 乙個小整數。主要當時把他們看成原始二級制了(無符號)如果改為:

else if((unsigned char)sz_str[i] != (unsigned char)0xcd) 也是可以的

俊逸,看似柔弱,卻亭亭玉立,

當雪花沁透著綠意,朔風漫捲大地,你卻在白雪皚皚中傲立枝頭,向世人宣布 春天到了。你雪映的顏,白裡透紅,嬌羞中含著冷豔 你傲立的枝,清雅俊逸,看似柔弱,卻亭亭玉立,承載著濃濃的嫣。你秀中藏傲,在嚴寒中開放,有的像雪,渾然一色,有的像少女的膚,冰清玉潔,滑如凝脂 有的像火,似夕陽映照的雲 黃的似金,囅然...

論壇六種推廣手段分析 看似簡單卻飽含智慧型

站長們,每天的工作細緻而周密,看著輕鬆,只有做站長的人知道,輕鬆的背後需要多少汗水,每天的推廣就著實讓人頭痛,沒點定力的很難在長期的周而復始的工作中堅持下來。所以 大大小小,每天又有多少的 面臨著倒閉,又有多少的 風聲水起。來來往往。論壇推廣方法,仍然在整個 推廣中佔據著很大的工作量,仍然佔據著很大...

記《假性親密關係》為什麼我們看似親近,卻貌合神離?

這本書無疑是寫愛情的,由淺入深,平淡中隱藏著愛情中相處的很多哲學與真相。本書由三部分層層展開,分別是 愛情的假性和真相 與自己對話 來自父母的愛與傷 無代價不愛情,其實做任何事不都有風險麼,愛情中沒有輸贏,真正的愛情是愛過了各種人,對各種所謂的幸福甜蜜都看透了,發現自己完全可以掌控生活,照顧自己,不...