2017-05-29 54 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