直接上**:
#include #include int main();
char szdst[20] = ;
int i;
memset(sztmp, 'a', sizeof(sztmp)-1);
sprintf(sztmp, "%d", 2);
printf("%s\n\n", sztmp);
for (i = 0; i < sizeof(sztmp); i++)
sprintf(szdst, 「%s」, szdst);
printf(「szdst: %s\n」, szdst);
return 0;
}
程式的執行結果是:
sztmp[0] = 50
sztmp[1] = 0
sztmp[2] = 97
sztmp[3] = 97
sztmp[4] = 97
sztmp[5] = 97
sztmp[6] = 97
sztmp[7] = 97
sztmp[8] = 97
sztmp[9] = 97
sztmp[10] = 97
sztmp[11] = 97
sztmp[12] = 97
sztmp[13] = 97
sztmp[14] = 97
sztmp[15] = 97
sztmp[16] = 97
sztmp[17] = 97
sztmp[18] = 97
sztmp[19] = 0
szdst: 2
這段**的意圖是生成乙個19個位元組的字串,第乙個字元是』2』,其它字元使用字元'a』填充,最後賦值給szdst。預計最後輸出為szdst: 2aaaaaaaaaaaaaaaaaa,可實際最後的輸出是szdst:2。why?
通過排查,最後發現問題出現在第乙個sprintf處,上面的列印已經很清楚地說明了問題,sprintf在構造乙個字串後會自動在末尾加上結束標誌』\0』。因此,在第二次使用sprintf時,由於該呼叫碰到結束符就返回了,故最後生成的字串只剩下了」2」。
這個小小的問題,平時基本沒怎麼留意過,系統自動對變數的修改總是有點讓人措手不及。後來上網查了下sprintf的用法,才發現該函式實在是問題多多,使用需慎重、慎重……
shell指令碼中字串比較經常遇到的乙個問題
1.大於小於符號必須轉義,否則shell會把他們當作重定向符合而把字串值當作檔名,如果不注意,可能刀子乙個不易察覺的嚴重問題。編寫 測試下 root wl ms 7673 chmod u x badtest root wl ms 7673 badtest baseball is greater th...
記乙個開發是遇到的坑之Oralce 字串排序
簡單描述一下情況,就是儲存過程中用乙個字串型別的字段作為患者就診的排序號,結果莫名發現叫完1號後叫了11 12等患者。使用者的反饋不一定準確,自己加了日誌的,趕緊拷貝日誌來觀察一下。結果發現實際情況就是這樣的,一邊說著不應該呀,一邊開始看 乙個個分析排序用到的字段,經過分析後發現由於這個欄位是字串所...
使用陣列輸入乙個字串,統計每部分字元的個數
使用陣列輸入乙個字串,統計每部分字元的個數 int main 程式入口,主函式,從這裡開始執行 else if str i a str i z else if str i 0 str i 9 else if str i else printf 小寫 d,大寫 d,數字 d,空格 d,其他 d sma...