Stack smashing
表示您正在非法使用堆棧(計算機內存的一部分)。堆棧內存的非法使用可以通過多種方式完成。一種方法是向數組添加更多的元素而不是其容量。例如,如果您嘗試將15個元素添加到容量爲10個元素的數組中,那麼您將擁有stack smashing
。
這裏你的情況,數組char arr[80];
有80
字符的容量,但是你在這個數組中添加了超過80個字符。這就是爲什麼你得到stack smashing
錯誤。
你的代碼有兩個問題。首先,您將以上的元素添加到arr[]
以上。
/* Issue 1 */
for(k=0;k<=4;k++)
{
if(wolf[k]!=str[i])
{
/* You are adding str[i] to
arr[] multiple times
*/
arr[j]=str[i];
j++;
}
}
這裏您比較str[i]
每個元音的性格和補充說,性格arr[]
每次。這樣每個字符加5次(非元音字母)或4次(元音字符)。
要解決此問題,您需要將str[i]
與所有元音進行比較,並且只有在與任何元音不匹配時纔將其添加到arr[]
。有很多方法可以做到這一點。例如,您可以使用附加變量作爲標誌。
其次,您不檢查arr[]
是否有剩餘空間添加任何新字符。在您的這部分代碼:
/* Issue 2: You are not checking if space left in arr[] */
for(i=0,j=0;i<len;i++)
{
在這裏,你的循環條件,你需要確保有留在ARR []
空間。所以,你需要在for循環中增加一個條件。
這是一個解決方案(多間):
/* Check if space left in arr, i.e. j < 80 */
for(i=0,j=0;i<len && j < 80;i++)
{
/* Add a flag:
1 means vowel
0 means not a vowel
*/
int v_flag = 0;
for(k=0;k<=4;k++)
{
if(wolf[k] == str[i])
{
v_flag = 1; /* Indicate that this is vowel */
break;
}
}
/* Add to arr[] only if not a vowel */
if (v_flag == 0)
{
arr[j] = str[i];
j++;
}
}
/* Null terminate the string */
arr[j] = '\0';
來源
2016-08-01 08:59:20
sps
'如果(狼[K] = STR [1]!)':條件不匹配時,不必全部。例如[this](http://ideone.com/IM5k7t) – BLUEPIXY
@NamanSharma:您可以點擊其分數下面的灰色複選標記來接受其中一個答案。 – chqrlie