亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 字符串生成函數(shù) [打印本頁]

作者: 104359176    時間: 2018-09-14 23:10
標題: 字符串生成函數(shù)
我想創(chuàng)建一個字符串,不知道這么寫對不對?
因為這種寫法,<<C語言程序設計方法>> 中只是說未初始化的指針變量不能按索引賦值。

  1. char* char_to_str(char ch) {
  2.   char* s = (char*)malloc(2);
  3.   s[0] = ch; s[1] = '\0'; return s;
  4. }
復制代碼
而網(wǎng)上 C語言中文網(wǎng)中,有篇文章說字符串指針是常量,不能修改:

網(wǎng)上99%的介紹字符串的用法,都無法用到函數(shù)中,因為C語言會自動將函數(shù)中創(chuàng)建的常量回收。

  1. char* char_to_str(char ch) {
  2.   char str[2];
  3.   str[0] = ch; str[1] = '\0'; return str;
  4. }
復制代碼
這種寫法,編譯器會默默的接受,但運行結果也會默默的返回錯誤。

作者: cjaizss    時間: 2018-09-16 13:38
你動態(tài)分配了2個字節(jié)(向堆請求了2字節(jié)的空間),完全可行。但記得不用的時候要通過free歸還空間。
遇到"xxxxxx..."基本上空間都是在ro段(Read Only),當然內容不可修改的。
不過char s[20] = "just a test";
這樣的情況例外,這只是一個字符數(shù)組獨特的初始化寫法而已。
另外,你最后一個代碼,返回了局部變量(在棧里),一旦函數(shù)返回,后果是未定義而根據(jù)機器和編譯器的實現(xiàn)決定。編譯器不用去管你干嘛,所以最多會警告你一下你可能在爬窗戶而不走正門。
作者: 104359176    時間: 2018-09-17 08:38
C語言是一門和其他語言不通的語言,因為它有手動垃圾回收。
作者: Sevk    時間: 2018-09-20 10:09
提示: 作者被禁止或刪除 內容自動屏蔽
作者: 104359176    時間: 2018-09-20 23:03
我一直沒法確定我的程序莫名其妙的出問題到底是不是和內存不夠有關系,但對于字符串的創(chuàng)建和轉換,很多情況下并不知道需要預備多大的空間,這個時候,會使用默認的一個初始值,設置大了浪費,設置小了,要多次 realloc 空間。

8M對于一般的小程序是夠了,但我的程序恐怕不夠,以前用 valgrind 測試了一下代碼,發(fā)現(xiàn)未回收的空間就有20多M, 嚇的我趕緊 free.




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2