最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

字符串及文件操作問題?

字符串及文件操作問題?

C C++
慕粉18341035298 2017-01-10 17:25:10
#include<cstdio> #include<stdlib.h> #include<iostream> int?main() { ?char?s[]?=?"asdfasdf"; ?FILE?*d?=?fopen("a.txt",?"r"); ?if?(d?==?NULL){ ??printf("no\n"); ??exit(0); ?} ?char?*m;//改成m[10]才可以,原來的寫法為什么不對(duì)? ?fgets(m,5,?d); ?printf("%s\n",?m); ?fclose(d); }
查看完整描述

3 回答

已采納
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊

fgets 函數(shù)會(huì)把讀到的字符串存入第一個(gè)參數(shù)所指的內(nèi)存中。然而 char?*m ?這個(gè) m 只是個(gè) char 指針,且 m 沒有被賦予初值,那么 m 的初值是不確定的——也就是說 m 指向一塊不確定的內(nèi)存,那一般不是你能合法、安全使用的內(nèi)存。

fgets 的參數(shù)是指針,但它要操作的是指針?biāo)傅膬?nèi)存,所以注意不要僅僅傳入一個(gè)指針,而是要確保指針?biāo)傅膬?nèi)存是你能合法使用的。


將 m 聲明為 char m[10],這樣 m 就是一個(gè)能容納10個(gè)字符的數(shù)組。數(shù)組名在作右值使用時(shí)(傳參時(shí))會(huì)自動(dòng)轉(zhuǎn)為指向數(shù)組首元素的指針,所以你傳入 fgets 的 m 就是一個(gè)指向 m 數(shù)組的指針。這樣就可以讓 fgets 正常工作了。

查看完整回答
1 反對(duì) 回復(fù) 2017-01-11
?
Xyino_Snake

TA貢獻(xiàn)31條經(jīng)驗(yàn) 獲得超22個(gè)贊

這是一個(gè)中規(guī)中矩的C語言問題。我知道這是C++。char * 只是一個(gè)指針。你并不能直接往這個(gè)指針里寫內(nèi)容。除非它指向一塊已經(jīng)分配好的內(nèi)存。比方說指向一個(gè)全局的char數(shù)組緩沖區(qū)?;蛘撸阋部梢杂胣ew來動(dòng)態(tài)分配一塊內(nèi)存??梢詫懗蒫har * m = new char[256];然后再傳m給fgets就行了。當(dāng)然,new []分配的內(nèi)存必須用delete []手動(dòng)釋放掉。
查看完整回答
2 反對(duì) 回復(fù) 2017-01-11
  • 3 回答
  • 1 關(guān)注
  • 1629 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)