当我进入时,为什么会这样;
char string[10^4];
scanf("%s", string);
我遇到了运行时错误;
char string[10000];
scanf("%s", string);
工作得很好?
顺便说一句,当输入不是一个大字符串时,两者都工作正常。例如,当字符串为"abc"
时,它在两种情况下均正常工作,但当它为"wqrjljowspxmsvkjkkogvcyheydhikggaypnjdkbvhnpcxyojowhquouuuceeimgicurheuenjtritfshbbyxpsrlwxpfjwpnsjxwdbjnxaxqhryisyhkqavnxnuillwdutzywkntkkmtckbuikga"
时,它仅适用于第二种情况。
原谅我极长的弦乐。这是我的测试用例的一部分。
答案 0 :(得分:7)
10^4
的值为14,因为^
是XOR运算符。
你不能简单地写1E4是10 4 ,因为那是一个浮点常数,数组边界必须是整数常量。你可以投了它(char string[(int)1E4];
),但为什么不简单地写下你的意思:char string[10000];
就像你在第二个例子中所做的那样。
你应该写一个论点:
if (scanf("%9999s", string) != 1)
…handle input error or EOF…
这可以保护您免受缓冲区溢出的影响。
答案 1 :(得分:4)
char string[10^4];
上面是一个长度为14的数组,因为^
是按位 - 或 - 不是幂。
所有其他的都与第二种情况相同,但上限要低得多。
char string[10000];
scanf("%s", string);
以上有3个失败点:
malloc()
或静态缓冲区进行堆分配。)