2015-08-31 45 views
1

我試圖扭轉一個字符串(的char陣列),但得到這個錯誤:扭轉在C字符串W/O使用`reverseStr()`

error: 'for' loop initial declarations are only allowed in C99 mode

可能有人請幫助我,告訴我的代碼有什麼問題?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char myString[] = "My name is Blalalalala"; 
    char reversedString[] = ""; 

    int count = 0; 
    for(int i = sizeof(myString) - 1; i >= 0; i--){ 
     reversedString[count++] += myString; 
    } 
    for(int i = 0; i < sizeof(reversedString); i++){ 
     printf("%c", reversedString[i]); 
    } 

    return 0; 
} 
+0

數據聲明的arent允許在C89頭。修復或者指定-std = c99或者將i的數據類型聲明移出循環以獲得最大的可移植性 – amdixon

+1

您正在訪問'reversedString'越界,並且您需要支持C99或更高版本的編譯器。 – juanchopanza

+0

^這兩件事情都是真實的,需要在OP代碼中加以解決。將'reversedString'放入一個大小爲'myString'的緩衝區中,並在循環結構之外初始化'i'。 –

回答

2

問題(如果我們可以把它叫做一個問題)這裏關於警告

for(int i = ....... 

你申報(並限定)的for循環條件中i變量。它只允許通過C99標準。在此之前,所有變量聲明都應該在塊的開始處完成。

編譯時,您可以強制編譯器通過使用--std=c99來啓用C99

爲了以防萬一,您沒有C99支持,您必須將環路條件語句之外的i的定義移出。

這就是說,讓我們來看看代碼中的實際問題。

  1. char reversedString[] = "";定義了與僅大小1陣列。後來,他們不是自動擴展,所以你當前的代碼訪問超出限制的內存來生成undefined behaviour

  2. myString作爲一個陣列,所述陣列名稱表示數組的基地址,所以可以不想寫

    reversedString[count++] += myString; 
    
+0

所以,基本上在c我不能在'for-loop'中聲明變量? @SouravGhosh – Michael

+0

@Michael Nope,你**可以**,但爲此,你的編譯器應符合'C99'或更高版本。 –