2017-05-29 55 views
-1
#include <stdio.h> 
#include <stdlib.h> 
char* findNumber(int arr_size, int* arr, int k); 
char* findNumber(int arr_size, int* arr, int k) { 
    char *result =malloc(sizeof(char)*4); 
    int i; 
    int flag = 1; 

    for (i = 0;i<arr_size;i++){ 
     if (*(arr+i)==k){ 
      flag = 0; 
      break; 
     } 
    } 
    else if (flag = 0){ 
      *(result) = "YES"; 
     } 
    return result; 
} 

int main() { 
    int arr [3]= {1,2,3}; 
    int size = 3; 
    int k = 3; 
    char * a; 
    a = findNumber(size,arr,k); 
    printf(" %s",a); 
    return 0 ; 
} 

在這段代碼中,我試圖在給定的數組中找到一個數字,並將結果存儲在指向數組的字符指針中,然後我將打印main但我不斷收到垃圾值我的代碼中有什麼錯誤?返回指針是c中的垃圾值

+0

請編輯以提高可讀性。散文,大寫字母和一些換行符。代碼中的縮進。 – Yunnosch

+0

好什麼不明顯? –

回答

1

首先,爲了做你正在描述的內容,將一個指針傳遞給你想修改的變量(在C++中,你可以通過引用傳遞)。在這種情況下,該功能會是這樣的:

void findNumber(int arr_size, int* arr, int k, char* result) { 

// do something that modifies result 

} 

其次,這條線是錯誤的:

else if (flag = 0){ 

這種情況下總是會返回trueelse是錯誤的。

+0

該標誌將爲0,如果我發現該數字是唯一的案例 –

+0

,我不能這樣做,因爲我只有這些變量我不能在函數中包含另一個變量 –

+1

歡迎來到堆棧溢出。請參閱答案窗口右上角的「幫助」,瞭解如何格式化代碼。 – Gary99

0

你沒有得到任何語法錯誤? 檢查循環附近的括號 如果在for循環內有作用域,否則如果不在。 而jst確實返回「是」;否則返回「否」

+0

沒有語法錯誤我使用的代碼塊 –

-1

我在if條件中犯了一個錯誤,我沒有使用strcpy()謝謝你們

+0

你不應該使用'strcpy',因爲它是不安全的。 – arboreal84

+0

那我該用什麼? –

+0

'strcpy'有更安全的選擇。如果源緩衝區大於目標緩衝區,'strcpy'會導致緩衝區溢出。 'strncpy'稍微安全一些。 – arboreal84