gpt4 book ai didi

c - 打印 C 中函数返回的字符数组

转载 作者:行者123 更新时间:2023-11-30 19:17:06 25 4
gpt4 key购买 nike

我是C语言的新手,所以请原谅我的初学者问题。

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

char *decimal_to_binary(int);

void main() {
int buffer;

while (1) {
printf("Type your number here: \n\r");
scanf_s("%d", &buffer);
printf("After conversion to binary system your number is: \n\r");
printf("%s", decimal_to_binary(buffer));
printf("\n");
}
}

int get_byte_value(int num, int n) {
// int x = (num >> (8*n)) & 0xff
return 0;
}

char* decimal_to_binary(int num) {
int tab[sizeof(int) * 8] = { 0 };
char binary[sizeof(int) * 8] = { 0 };
int i = 0;

while (num) {
tab[i] = num % 2;
num /= 2;
i++;
}

for (int j = i - 1, k = 0; j >= 0; j--, k++) {
binary[k] = tab[j];
}

return binary;
}

当我打印出从decimal_to_binary返回的任何内容时,我得到一些垃圾(笑脸字符)而不是二进制表示形式。但是,当我在 decimal_to_binary 函数的最后一个循环中执行 printf 时,我得到了正确的值。那么我做错了什么?

最佳答案

这个

char binary[sizeof(int) * 8] = { 0 };

是一个局部变量声明,你不能返回它。

您需要使用堆从函数返回一个数组,为此您需要 malloc()

char *binary; /* 'binary' is a pointer */
/* multiplying sizeof(int) will allocate more than 8 characters */
binary = malloc(1 + 8);
if (binary == NULL)
return NULL;
binary[sizeof(int) * 8] = '\0'; /* you need a '\0' at the end of the array */
/* 'binary' now points to valid memory */

接下来的赋值binary[k] = tab[j];可能不是你想象的那样

binary[k] = (char)(tab[j] + '0');

可能就是您想要的。

注意:c 中的字符串只是以“\0”结尾的字节序列。

修复此问题后,您还需要修复 main(),现在就执行此操作

printf("%s", decimal_to_binary(buffer));

是错误的,因为decimal_to_binary()可能返回NULL,并且因为您需要在返回后释放缓冲区,所以

char *binstring = decimal_to_binary(buffer);
if (binstring != NULL)
printf("%s", binstring);
free(binstring);

另外,请注意,您只计算 8 位,因此 decimal_to_binary 的适当签名为

char *decimal_to_binary(int8_t value);

关于c - 打印 C 中函数返回的字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28660177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com