無冗餘輸入字串 字串陣列 字串

2021-09-11 13:52:10 字數 1115 閱讀 1222

問題:「無冗餘」輸入乙個字串

分析:「無冗餘」是指儲存的空間不能有冗餘的,比如,要存的陣列長度是10(加上『\0』是11),不可以定義陣列為char str[20],這樣還會有8個位元組(還是9個位元組?!)的空間沒被用,就算是冗餘,因此不能事先分配乙個足夠大的空間,也就不好用陣列實現,然後應該用指標實現(參考的部落格:

**如下:

#include

#include

int main()

p=(char*)realloc(p,sizeof(char)*i);

*(p+i-1)='\0';   //getchar()函式不會自己加上字串結束標誌,所以要自己加上'\0'

printf("%s\n",p);

free(p);   //釋放空間

return 0;

}待解決:這個思路以及編寫的**是能夠做到無冗餘輸入字串的,截圖如下:

但是!!!如果輸入的字串很長,比如輸入了26個字母,結果就難以預料了······我想會不會是電腦被占用的記憶體太多,所以動態分配的時候沒成功?!於是修改**如下:

#include

#include

int main()

else

}if(p=(char*)realloc(p,sizeof(char)*i))

else

free(p);

}return 0;

}執行結果如下:

所以,應該是在動態分配的時候出了問題的吧···動態分配的(malloc等)變數是儲存在堆區,按理說free()不是應該能釋放記憶體嗎?!然後參考了這份部落格:好像懂了點,但是也還是沒懂到底是發生了什麼o(╥﹏╥)o,因為第一張截圖裡沒出現error,但是儲存的結果不完全是輸入的字串····問題沒有解決······(對菜鳥的我來說,儲存機制真的深奧)

無冗餘輸入字串 字串陣列 字串陣列

問題 輸入乙個數字n,接下來輸入n個字串,要求無冗餘地儲存字串 分析 參考到無冗餘地字串輸入 使用動態分配。本題還參考了這個鏈結的內容 1 include include int main char p int ns,i scanf d ns p char malloc sizeof char fo...

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...

字串和字串陣列

字串陣列 include int main int argc,const char ar printf name1 s n name1 name1 zhangsan 部分初始化中,沒有被初始化的元素預設是0,0 對應的ascii值是 0 char name2 9 printf name2 s n n...