函数结束后字符串值的变化

时间:2017-08-16 20:50:29

标签: c

我构建这个函数将整数转换为二进制字符串

char* numberToBinary(int num){
    char arr[11];
    int x=1;
    for(int i=0;i<10;i++){
        arr[9 - i] = (num & x)?'1':'0';
        x = x<<1;
    }
    arr[10] = '\0';
    char* res = &arr[0];
    printf("%s\n", res);//prints 0000000100
    return res;
}
printf("%s\n", numberToBinary(4));//prints changeable binary data

问题出在变量res具有正确答案的函数内部,但看起来函数I guess中检索到的值是变量res的位置,它已被取消定位来自记忆。

如何使函数numberToBinary在其他内容中返回一个字符串。

1 个答案:

答案 0 :(得分:1)

返回本地变量的地址会导致undefined behavior,因为在您将其传递给printf()时,它不在范围内(在其生命周期内结束)。

您必须传递一个数组作为参数,或者在char* res上分配heap动态存储时间)。

实施例

char* res = malloc (amountOfBytesYouNeed);
if (res == NULL) { /*err msg*/ exit(-1); }
// Store data to res insted of arr
return res;

//
char * ptr = numberToBinary(4);
printf("%s\n", ptr);
free(ptr); // !