char 未指定陣列大小引發的錯誤

2021-07-03 20:09:16 字數 777 閱讀 8304

劍指offer上面的一道題目,不難,甚至可以說是簡單的。但是就是因為一處隱蔽的錯誤讓我晚睡了半個多小時,今天發生這個而錯誤的原因分享給大家,希望大家不要犯跟我相同的錯誤。

#include#includeusing namespace std;

void replacespace(char* str,int length)

*(str+i) = '%';//在相應的位置進行替換操作

*(str+i+1) = '2';

*(str+i+2) = '0';

k++;

*(str+length+2*k) = '\0';//末尾新增'\0'

i = i + 3;

} else

} cout << str << endl;

}int main(void)

如果在主函式中寫成char str = "hello wor ld hello world";執行的結果首先列印出替換之後的結果,之後會報段錯誤。這個段錯誤讓我很是頭疼,之前一直在糾結是不是在replacespace函式中出現了錯誤,但是最後還是在主函式中發現了錯誤。原因是在replacespace中有對陣列的修改,將陣列中的某些資料向後移動了,如果不指定陣列的維數,那個陣列str只能分配strlen(str)+1個大小的位元組。這樣在replacespace中將數值中的某些元素向後移動了,自然陣列是裝不下這些替換之後的資料的。所以會報段錯誤。

指定陣列中的資料比大小

比大小 需求 1.要求定義a k 13張牌 分別代表 1 13點分數 a,2,3,4,5,6,7,8,8,10,j,q,k 2.本人和電腦 每人隨機分三張牌顯示在控制台 要求純隨機 3.然後比較你和電腦三張牌的點數之和的大小,分出誰是贏家,並贏了多少點,輸了多少點或打平 思路 1,定義兩個字串陣列,...

ping指定資料報大小

ping指定資料報大小 linux下ping包的預設大小為64byte,次數不限。但有時我們需要嘗試ping大資料報,來測試網路的狀況,這時,就要指定ping包的大小了。linux下ping大資料報的格式 語 法 ping dfnqrrv c 完成次數 i 間隔秒數 i 網路介面 l 前置載入 p ...

刪除陣列中的指定數字

編寫乙個函式void fun int bb int n,int y 其中 n表示bb陣列中元素的個數。函式功能 刪除bb中所有值為y元素,bb陣列元素的值和y的值由主函式通過鍵盤讀入。作者的源 是這樣的 1 void fun int bb int n,int y 2 11 以上 12 也沒想他到底 ...