C語言執行STU然後再SCORE

2022-08-02 13:15:31 字數 3320 閱讀 9993

1樓:娜樣滴歌傑出膚

typedef struct stustu;

void f(char *p)

int main(void)

,b;a.name=(char *)malloc(10);

strcpy(a.name,"zhao");

b = a;

f(b.name);

b.gender ='f';

b.score =350;

printf("%s,%c,%d

\n",a.name,a.gender,a.score);

printf("%s,%c,%d

\n",b.name,b.gender,b.score);

return 0;

}為啥註釋掉了以後的答案變成:qian,m,290,qian,f,

350,?

而不註釋掉答案卻是: zhao,m,290,zhao

,f,350?

你的目的是通過函式去修改另外一個結構體物件b中成員name

的值。觀察到成員中的gender和score基本上沒有什麼值得研究 ,

所以只研究第一個成員name。

在你執行了**b=a的時候,b和a分別在記憶體條上佔用

sizeof(stu)的空間大小。而且,這兩個空間中的值都是一

模一樣的。

當你執行了函式f()的時候,分兩種情況。

第一沒有註釋:函式f會在棧上分配4個位元組的記憶體(sizeof

(char*),因為p的型別就是char*)。那麼p的值就是等於

b.name。

b.name的值我們假設是0x1234567,那麼現在p的值也就是

0x1234567。沒有註釋的情況下,p的值馬上被修改成malloc

的返回值,所以現在p的值一定不是0x1234567。

假如malloc的返回值是0x7654321,那麼現在p的值也就是

0x7654321。你使用了strcpy,那麼0x7654321首地址開始的

內容就變成了zhao。

所以,你沒有改變0x1234567所指向的內容。結果就是

0x1234567指向的內容還是為zhao。

第二有註釋:函式f會在棧上分配4個位元組的記憶體(sizeof

(char*),因為p的型別就是char*)。那麼p的值就是等於

b.name。

b.name的值我們假設是0x1234567,那麼現在p的值也就是

0x1234567。有註釋的時候。p的值沒有被malloc改變,還是

0x1234567.你使用了strcpy,就修改了0x1234567所指向的

記憶體。最開始的記憶體中值是zhao,你修改後就變成了qian.

你的這個例子錯誤很多,但是基於你是實驗的目的,我就不指

正了。針對不註釋的情況,如果你要改變的話,我認為比較正

確的做法應該是這樣的。

typedef struct stustu;

void f(char **p)

int main(void)

,b;a.name=(char *)malloc(10);

strcpy(a.name,"zhao");

b = a;

f(&b.name);

free(a.name);

a.name=null:

return 0;}

2樓:風若遠去何人留

p指向s,其實是指向s[0]

於是 sum上累加的三個p->score[i]就是s[0].score[0]到s[0].score[2]也就是90+95+85 = 270選b

c語言有個a同b再和c

3樓:風若遠去何人留

9 對於a>b>c 不會按照數學方式計算。而是先計算a>b 即5>4 成立,值為1.

然後計算1>c 即1>3 不成立,結果為0於是d=0

輸出011 初始s=0,i=1 每次迴圈i自加後,將i累加到s上再判斷i<3

於是s=2+3=5輸出5

4樓:育知同創教育

(9)0;

(11)初始s=0,i=1 s=2+3=5 輸出5

c語言在linux下編譯通過,一執行就段錯誤 200

5樓:jackyleung射手

linux裡面段錯誤就是記憶體訪問的錯誤了,應該是你**裡的記憶體分配有問題,因為沒看到你這裡的struct studen的具體定義,只能讓你注意看下studen的name這個字串的定義,txt檔案裡的name欄位有沒有超出這個name的定義長度,如果超出了,fscanf就會報記憶體錯誤了

6樓:匿名使用者

報什麼錯?依賴問題吧,不同系統庫檔案又不是一致的。

7樓:匿名使用者

程式不完整哦,無法測試,請給出stuscore.h及其實現。

求c語言高手寫一道程式設計題。 1、編寫程式: a.已有檔案stu1.txt,包含學生的學號、姓名及平

8樓:滄海雄風

#include

#include

struct stuinfo

;int main()

,tmp=;

char str[256]=;

fp = fopen("stu1.txt","r");

while (fgets(str,sizeof(str),fp))fclose(fp);

total = i;

for (i=0;i0)}}

fp = fopen("001.txt","w");

for (i=0;i

9樓:匿名使用者

int main()

c語言程式一執行就出現exe錯誤

10樓:匿名使用者

if(strcmp(s,stu[i].name==0)){這裡有錯誤,

strcmp是比較兩個字串的大小,你這裡應該是比較s和stu中成員變數name中的字串是否相等,正確的做法如下

if(strcmp(s,stu[i].name)==0)

11樓:匿名使用者

if(strcmp(s,stu[i].name==0))

改為if(strcmp(s,stu[i].name)==0)

括號的位置放錯了

12樓:匿名使用者

(strcmp(s,stu[i].name)==0)

用先然後再又造句,先 然後 再 又 造句

用先.然後 再 又 造句 1 清晨的太陽,先露出小小的頭,然後落到地平線下面,再冉冉升起來了,又越過高山出現在人們的上空。2 我先起床,然後穿衣服,再刷牙 洗臉,又吃了早餐,最後去上學。3 我們先燒開水,然後把調料放進去,再把羊肉片放進去,又進行了攪拌,幾分鐘後開鍋就可以吃了。延伸 造句的方法一般有...

tc執行c語言問題,TC執行c語言問題

include 找不到標頭檔案的話應該是除錯環境設定問題 int main 錯誤是標頭檔案不存在 輸出函式後沒加分號 解決找找看那個stdio.h在哪個檔案裡,放到根目錄,就是很tc.exe放在一個目錄下 輸出函式後加分號 樓主,你好,很高興能為你解答問題!1 main應該改成void main。2...

用「先然後再最後造句,用「先 再 然後 最後 」造句 30 50字左右

1 早上,我先穿衣,再刷牙,然後再洗臉,最後再吃早飯。2 我回家後,先吃飯,再做作業,然後複習,最後洗漱睡覺。3 做香蕉奶昔很簡單,先把香蕉去皮,再放入榨汁機中,把它們打碎後,再加入牛奶攪拌,最後用碗盛出來,香蕉奶昔就做成了。4 我先做語文功課,再做數學功課,然後做英語功課,最後做科學功課。首先 然...