2016-05-14 168 views
4

我在我的主函數中切換的情況4中不斷崩潰,並且無法修復它。從一個函數中的數組中打印字符串C

我會解釋一下代碼,希望你們能幫助我:

初始化函數

void function1(char[]); 

聲明字符串

const char *my_array[] = { 
"Array of strings one", 
"Array of strings two", 
"Array of strings three"}; 

通過數組循環數組主函數中的字符串(這能正常工作,它打印字符串數組)

int i; 
for (i=0; i < 3; i++) { 
    printf("%s\n", my_array[i]); 
} 

在開關函數的代碼(仍然在主函數)

case 4: 
      function1(my_array); 
      break; 

我測試過,所有以前的代碼的工作正常,問題是在這裏(主要功能外):

void function1(char my_array[]) { 
for (i=0; i < 3; i++) { 
    printf("%s\n", my_array[i]); 
} 
printf("\n");} 

當我執行開關的情況4時,它崩潰。

的2警告日誌給出:

警告:傳遞 '功能1' 的參數1不兼容的指針 類型

警告:格式 '%s' 的期望類型 '字符*' 的參數但爭論2 具有類型「詮釋」 [-Wformat =]

很抱歉,如果它是一個有點不清楚我想很難,因爲我可以爲它是很容易理解的解釋。

我真的希望你們能幫助我,謝謝!

+2

你不能傳遞一個'的char []',你傳遞'char * []'或'char **' –

回答

9

的第一個警告,即

警告:從兼容的指針類型

過客「功能1」的參數1講述了:要傳遞字符指針數組,但功能聲明說它需要一個簡單的字符指針。

第二個警告會告訴你從函數內部的同一件事:

警告:格式「%s」的預期類型「的char *」的說法,但參數2的類型爲「INT」 [ -Wformat =]

格式想要一個C字符串,而是要傳遞一個char*

所有你需要做的,解決這個問題是缺少一個星號添加到的function1聲明:

void function1(const char *my_array[]) 
//    ^^^^^ ^

當你在它,添加constmy_array聲明中main匹配。

*編譯器說,你是傳遞一個int,不char,因爲printf採用可變數量的參數,所以編譯器應用某些轉換到函數的參數。其中一項轉型是將所有char s推廣至int s。

+1

它應該是'void function1(const char * my_array [])'以匹配main中'my_array'變量的聲明。 – mch

+0

@mch你說得對,OP也應該加上'const'。謝謝! – dasblinkenlight

1

請有在函數減速細看

無效功能1(CHAR my_array [])

你傳入字符數組是字符串(這顯然你不希望) 。第二個問題是這條線,

printf("%s\n", my_array[i]); 

當你說my_array [I],你想在「我」的位置來訪問字符和用%s打印字符(這是一個崩潰)。要打印字符,你應該寫這個

printf(%c\n", my_array[i]); 

現在,讓我們根據您的要求修改代碼,你應該有一個函數,它接受字符指針(或字符串)的陣列

void function1(const char* my_array[]) 
{ 
    for (size_t i = 0; i < 3; i++) 
    { 
     printf("%s\n", my_array[i]); 
    } 
    printf("\n"); 
} 

請注意使用'const'(如果你只需要讀取/打印字符串數組中的數據)。請考慮發送數組的大小,並使用該大小來遍歷循環。

void function1(const char* my_array[], size_t n) 
{ 
    for (size_t i = 0; i < n; i++) 
    { 
     printf("%s\n", my_array[i]); 
    } 
    printf("\n"); 
} 
1

玉傢伙我已經嘗試了所有的解決方案,當我在函數中添加「常量」它給了我一個錯誤「錯誤衝突的類型」。

讀你們所有人我發現我只是在函數中傳遞一個字符而不是字符串(在函數和函數的初始化中缺少*)。

我改變了這個:

void function1(char[]); 

要這樣:

void function1(char*[]); 

這:

void function1(char my_array[]) { 
    for (i=0; i < 3; i++) { 
    printf("%s\n", my_array[i]); 
    } 
    printf("\n"); 
} 

這樣:

void function1(char* my_array[]) { 
    for (i=0; i < 3; i++) { 
    printf("%s\n", my_array[i]); 
    } 
    printf("\n"); 
} 

它就像一個魅力!

對不起,如果這是一個noob問題,但我從C編程開始。

謝謝大家的回答我很感激!

+0

:)很高興聽到!保持! – Bishop

0

假設你想要的遍歷數組中的元素,並打印其所有內容的功能,這裏是我的建議:

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


void view(char *array[]){ 
    int i; 
    for (i = 0; i < sizeof(array)/sizeof(char); i++){ 
     //sizeof(array)/sizeof(char) = length of any array   
     printf("\nElement -> %s",array[i]); 
    } 
} 


int main() { 

    char *arr[] = {"String One", "String Two", "String Three"}; 

    view(arr); //Calling the function 

    return 0; 
} 
相關問題