[問題] 字串輸出疑問
開發平台(Platform): (Ex: Win10, Linux, ...)
xp
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
code block
問題(Question):
程式碼交換位置後 執行出現錯誤
餵入的資料(Input):
1234
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
main()
{
char str1[]="";
char *str2="您輸入的字串如上";
printf("請輸入字串:");
fgets(str1,80,stdin);
printf("%s",str1);
printf("%s",str2);
}
以上程式碼 執行時 會出現錯誤
------------------------------------------
#include <stdio.h>
#include <stdlib.h>
main()
{
char str1[]="";
printf("請輸入字串:");
fgets(str1,80,stdin);
printf("%s",str1);
char *str2="您輸入的字串如上";
printf("%s",str2);
}
將 char *str2="您輸入的字串如上";
這段移動到下方
就可以正常執行
不明白為什麼
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.220.35.157
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1509695947.A.7F8.html
→
11/03 16:09,
8年前
, 1F
11/03 16:09, 1F
→
11/03 16:11,
8年前
, 2F
11/03 16:11, 2F
→
11/03 16:11,
8年前
, 3F
11/03 16:11, 3F
→
11/03 16:12,
8年前
, 4F
11/03 16:12, 4F
→
11/03 16:18,
8年前
, 5F
11/03 16:18, 5F
→
11/03 16:19,
8年前
, 6F
11/03 16:19, 6F
→
11/03 16:20,
8年前
, 7F
11/03 16:20, 7F
→
11/03 16:21,
8年前
, 8F
11/03 16:21, 8F
推
11/03 16:25,
8年前
, 9F
11/03 16:25, 9F
→
11/03 16:26,
8年前
, 10F
11/03 16:26, 10F
→
11/03 16:27,
8年前
, 11F
11/03 16:27, 11F
→
11/03 16:28,
8年前
, 12F
11/03 16:28, 12F
→
11/03 16:30,
8年前
, 13F
11/03 16:30, 13F
→
11/03 16:33,
8年前
, 14F
11/03 16:33, 14F
維持 第一個程式的順序
改為輸入 A
執行不會有錯誤
但是
printf("%s",str2);的功能沒有顯示出來
輸出如下=>
請輸入字串:1
1
---------------------------------------
改為輸入 AB
執行還是有錯誤 當機
這次應該沒超過4 Byte了吧?
為什麼還是有錯誤
※ 編輯: x246libra (61.220.35.157), 11/03/2017 16:45:15
→
11/03 16:43,
8年前
, 15F
11/03 16:43, 15F
→
11/03 16:51,
8年前
, 16F
11/03 16:51, 16F
→
11/03 16:53,
8年前
, 17F
11/03 16:53, 17F
→
11/03 16:56,
8年前
, 18F
11/03 16:56, 18F
→
11/03 16:57,
8年前
, 19F
11/03 16:57, 19F
main()
{
char str1[]="";
int n;
fgets(str1,80,stdin);
printf("%d",strlen(str1));
}
單純使用 strlen 輸入1234
輸出5
※ 編輯: x246libra (61.220.35.157), 11/03/2017 17:02:37
推
11/03 17:06,
8年前
, 20F
11/03 17:06, 20F
→
11/03 17:07,
8年前
, 21F
11/03 17:07, 21F
→
11/03 17:08,
8年前
, 22F
11/03 17:08, 22F
stupid0319: 上面的那個如果輸入超過4BYTE就溢位修改到str2指標了
這段話 老實說 我不太懂 不知道是否可以再說明一下
為什麼不可以超過4byte?
程式碼中 fgets(str1,80,stdin); 不是說可以可以使用80個字元嗎?
如果真的4BYTE就溢位 又什麼會修改到str2指標?
他們的記憶體位置有連續嗎?
※ 編輯: x246libra (61.220.35.157), 11/03/2017 17:10:36
→
11/03 17:25,
8年前
, 23F
11/03 17:25, 23F
→
11/03 17:26,
8年前
, 24F
11/03 17:26, 24F
→
11/03 17:27,
8年前
, 25F
11/03 17:27, 25F
→
11/03 17:28,
8年前
, 26F
11/03 17:28, 26F
請問一下 是因為這句程式 char str1[]="";
所以str1才被配到4Byte嗎?
→
11/03 17:29,
8年前
, 27F
11/03 17:29, 27F
→
11/03 17:30,
8年前
, 28F
11/03 17:30, 28F
只是想瞭解後面的原理 只是個初學者
沒特別想這樣寫程式
※ 編輯: x246libra (61.220.35.157), 11/03/2017 17:32:38
→
11/03 17:30,
8年前
, 29F
11/03 17:30, 29F
→
11/03 17:32,
8年前
, 30F
11/03 17:32, 30F
推
11/03 17:36,
8年前
, 31F
11/03 17:36, 31F
→
11/03 17:36,
8年前
, 32F
11/03 17:36, 32F
→
11/03 17:36,
8年前
, 33F
11/03 17:36, 33F
→
11/03 17:38,
8年前
, 34F
11/03 17:38, 34F
謝謝以上的回答 那就不再研究下去了
至少讓我知到了 不到4Byte 會自動對齊到 4Byte
感謝各位的回答
原本也只是好奇 為什麼書本說可以執行 但是我卻不能
沒特別想說要研究記憶體溢位
※ 編輯: x246libra (61.220.35.157), 11/03/2017 17:41:55
→
11/03 17:39,
8年前
, 35F
11/03 17:39, 35F
→
11/03 17:40,
8年前
, 36F
11/03 17:40, 36F
→
11/03 17:41,
8年前
, 37F
11/03 17:41, 37F
→
11/03 17:42,
8年前
, 38F
11/03 17:42, 38F
→
11/03 17:43,
8年前
, 39F
11/03 17:43, 39F
→
11/03 17:45,
8年前
, 40F
11/03 17:45, 40F
→
11/03 17:48,
8年前
, 41F
11/03 17:48, 41F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章