#include?<stdio.h>#include?<string.h>int?main()
{ char?a[10000];
????????char?b[10000];
????????printf?("請(qǐng)輸入兩個(gè)字符串:");
????????while(1){
????????putchar(a[0]); }
????????//scanf("%s\n");
????????printf?("%s",a[0])?;
????????return?0;}上面的代碼執(zhí)行出來(lái)。。是永遠(yuǎn)在輸入,沒(méi)有輸出。。感覺字符串的操作很麻煩。。摸索到現(xiàn)在還是不太會(huì)。。再如以下的也有點(diǎn)奇怪的感覺#include?<stdio.h>
#include?<stdlib.h>
#include?<string.h>
int?main(){
char?line[]?=?"hello,my?name?is?xx\n";
printf("%s",line);
char?*copy?=?(char*)malloc(strlen(line)+1);
strcpy(copy,line);
copy[strlen(line)]?=?'\0'?;
//printf("%s\n",*copy); printf("%s\n",copy);
return?0;}問(wèn)題在于。。。上面的代碼最后一行為什么printf后面的copy不用加*呢?同樣是運(yùn)用指針,如果我用來(lái)操作打印int型變量就一定是要加*的,不然打印出來(lái)是地址。。但是字符串又不一樣。。。求各位大佬慷慨解釋一下
1 回答

慕蓋茨9781818
TA貢獻(xiàn)25條經(jīng)驗(yàn) 獲得超19個(gè)贊
第一個(gè),因?yàn)槟愕膒uchar在while(1)中,你沒(méi)設(shè)置break的條件,會(huì)無(wú)限循環(huán)要求你輸入的,修改循環(huán)部分代碼
C語(yǔ)言中是沒(méi)有特定字符串類型的,你使用%s輸出, 參數(shù)是一個(gè)指向字符數(shù)組的指針,所以你的copy不用加*, 因?yàn)閏opy本來(lái)就是個(gè)指針,你傳入int,他會(huì)認(rèn)為這是個(gè)指針來(lái)進(jìn)行操作,就會(huì)輸出地址,所以你需要加*號(hào)。
可能有點(diǎn)沒(méi)描述清楚,但第二個(gè)你需要多看看指針相關(guān)的內(nèi)容。
- 1 回答
- 0 關(guān)注
- 1034 瀏覽
添加回答
舉報(bào)
0/150
提交
取消