代碼是括號的匹配,報錯:寫入到stack時緩沖區溢位
原始碼:
#include<stdio.h>
main() {
char str[100];
FILE* stream;
freopen_s(&stream, "in.txt", "r", stdin);
freopen_s(&stream, "out.txt", "w", stdout);
while (scanf_s("%s", str, 100) != EOF) {
char stack[100];
int top = 0, i;
for (i = 0;str[i] != '\0';i++) {
if (str[i] != '(' && str[i] != ')' && str[i] != '[' && str[i] != ']') {
continue;
}
else if (str[i] == '(' || str[i] == '[') {
stack[top++] = str[i];
}
else if (str[i] == ')' || str[i] == ']') {
if (str[i] == ')' && stack[top - 1] == '[') {
printf("不匹配");
break;
}
else if (str[i] == ']' && stack[top - 1] == '(') {
printf("不匹配");
break;
}
else {
top--;
}
}
}
if (str[i] == '\0' && top == 0) {
printf("匹配");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
報錯:line16 寫入到stack時緩沖區溢位
line19 從stack中讀取的資料無效:可讀大小為100個位元組,但可能讀取了-1個位元組
uj5u.com熱心網友回復:
你確定檔案打開正確了嗎scanf進來后,你printf一次資料看看
此外, 文本當中的字串確實沒有超過100吧,否則str陣列最后一個可不是‘\0’, 會導致對str的訪問溢位的
for (i = 0;str[i] != '\0'&&I<99;i++) {
這樣更安全
uj5u.com熱心網友回復:
這個I是用作什么的呢?
結果為“匹配”時能夠寫入,“不匹配”就不行了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146182.html
標籤:C語言
上一篇:c語言求公約數 公倍數
下一篇:求大神 百思不得其解
