我构建这个函数将整数转换为二进制字符串
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
在其他内容中返回一个字符串。
答案 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); // !