ubuntu下使用strstr及strcpy函式消除分割符號導致輸出結果異常。如何解決?

時間 2021-06-02 16:44:03

1樓:Pluto Hades

記憶體重疊的問題。實際上strcpy的實現一般是彙編實現的快速拷貝,一般來說目的位址和源位址是沒有重疊的,你不能想當然的認為演算法實現是允許重疊的。

正經用新位址來存

#include

#include

#include

intmain()

;char*p

=NULL

;while((p

=strsep(&

s,delim

))!=

NULL

)printf

("[t] = %s\n"

,t);return0;}

2樓:

我在Ubuntu16.04上試了一下,結果也不一樣,是:

111122223333445555666666要麼是strcpy不能用於這樣的情況,然而我記得大概是可以的。

不然就是實現有bug。

補充:昨天出現問題的最後呼叫的是__strcpy_ssse3。編譯器版本好像是5.2。

今天又在另一台Ubuntu14.04上試了一下,結果正常。試了兩個編譯器,分別是gcc4.

8和gcc5.2。最後呼叫的都是__strcpy_sse2_unaligned。

3樓:麥大麥

你在printf("[p+1] = %s\n", p + 1);後面加個fflush(stdout);試試看?我的ubantu虛擬機器掛求了,不想裝,你試試。

4樓:

strcpy(p, p + 1);

記憶體不能有重疊吧,有重疊應當用 memmove。

另外,沒看懂題主想問什麼,不如直接說說你期望輸出什麼,實際輸出什麼。

BTW:演算法應當是兩個指標遍歷

#include

intmain

(void)

Ubuntu 下 LaTeX,TeX Live,LyX 等 TeX 軟體哪款更適合 TeX 初學者?

sgmsl 使用 Texmacs 或 Lyx,然後輸出 Latex.Texmacs 的快捷鍵和可定製性不是 Lyx 能比的,但是比 Lyx 簡陋點. 上官小河 如果不是為了學術創作,這些跟ms word 差別其實不大,都能滿足內容的撰寫,思想的表達,但是如果學術上比較講究,來點學術上的高階玩法,就要...

如何優雅地使用 Ubuntu?

Error 前段時間才從Windows轉到Linux,優雅談不上,只能算折騰,自己的第一台電腦用的是Windows,折騰了六年終於報廢。之後六年一台電腦沒碰過。很多東西都忘記了。現在只能從頭學起。現在買了臺遊戲本,我更喜歡叫它重型本。本身就很重,但效能很強悍。再加上電源更笨重了,再加上配套的機甲包,...

Ubuntu下python選擇pip install還是conda install更加合適?

主要是TensorFlow的話用conda會好很多,配置tensorflow gpu,CUDA,cuDNN等只要一行命令。 一根倔強的韭菜 建議用conda,安裝乙個miniconda就行了,用清華或者中科大源,盡量不要在Ubuntu自帶的Python裡面搭環境,容易搞壞系統,即使不用conda也要...