1樓:
while(*r)//r沒達到結尾(t1的元素沒有遍歷完)if(*r==*p) /*如果r地址的值和p地址的值相等,則r和p的地址分別加一*/
else break;//只要不與t1完全匹配,則結束這層迴圈if(*r=='\0') /*如果r地址所指的內容為串結束(字串的結束是以\0表示的)*/ //這表示子串t1已經在s中找到
此時w為t1在s中的位置;
a=w就表示a記錄了t1的開始了。
2樓:
a=w;
給了a以t1的開始。
你的程式只在t1與t2長度相等時才正確,如果t1與t2不等長,則不成立。要麼少換了字元,要麼多換了字元。此時,要先移動w中的後面的字元,在w後面留出與t2等長(除了\0)的空間,再複製。
還要注意不要越出主程式定義的字元陣列的邊界,主程式要將陣列的長度傳遞過來。或者由主程式自己判斷會不會越界。
3樓:匿名使用者
a沒有記錄t1的開始地址,而是記錄的當前w的地址,也就是當前字串的位置;
但剛好這個位置是匹配了t1的開始位置,所以*a也就和*t1值相同了我觀察你的程式,好像有一個問題,你的替換邏輯沒有考慮t1和t2的長度問題,如果兩個字串長度不一致,你這個邏輯就出錯了,考慮一個極端的例子,t1只有一個字元而t2有100個,當你需要替換的時候,需要按照t2的長度以及當前字串總長len,減去t1長度的值,重新計算新的字元長度,並申請記憶體,然後依次組合新的字串
最後從新字串t2末尾的位置重新開始查詢t1,這樣才能確保結果正確,且記憶體無溢位,而且在有多次匹配的情況下,要注意釋放掉不用的記憶體
c語言問題,C語言問題?
include include int main max min i 0 sum i 0 i 1 i 2 i 3 i 4 i 5 i 6 for j 0 j 6 j printf 去掉一個最高分 0.6lf max printf 去掉一個最低分 0.6lf n min printf 該選手最後的得分...
c語言問題,C語言問題?
char的範圍是 128 127的 你362就溢位了嘛 是這樣的 0362 0是表示8進位制 於是362在10進位制下是242 242溢位了 128 127 於是結果變成242 128 128 14 要明白這個,首先要明白記憶體中 c 變數是什麼樣子的。整數在記憶體中是以補碼的形式存取的。c 036...
C語言問題C語言問題,C語言小問題段錯誤是什麼
str2num char p num num k return num c語言問題c語言問題 include int main int h,m scanf d d h,m printf s num h if m 0 else printf o clock printf n return 0 c語言小...