正确的函数输出导致 printf 中产生垃圾

标签 c function printf

我正在自己练习 C 编程,有人要求我编写一个整数到字符串的函数。我的代码如下。

一切都是正确的,直到我尝试打印出主函数中的函数返回。正如“auto”在 Visual Studio 中向我展示的那样,我有正确的返回值,但它在 printf 函数中被搞乱了。有什么建议吗?谢谢。

#include <stdio.h>

char* itob(int n, char s[100], int b);
char reverse(char s[100],char i);
int main(void)
{
    int n,b,c=0;
    char* str;
    char s[100];
    ...

    str=itob(n,s,b);
    printf("%s",str);   //wrong
    main();
}

char* itob(int n, char s[100], int b)
{
int i=100,c,firstdig,a;
char str[100];
if(b==8)
    printf("0");
else if(b==16)
    printf("0x");

do
{
    c=n%b;
    if(c>9)
            s[i--]=c-10+'A';
        else 
            s[i--]=c+'0';
} while((n/=b)>0);
a=0;
c=i+1;
while(c!=101)
    {
        str[a]=s[c];
        a++;
        c++;
    }
str[a]='\0';    
return str;

}

最佳答案

如果没有完整的 itob 函数,至少没有 str 的定义,就很难回答,因为它可能引用堆栈上的变量,而不是堆上的变量,因此当函数 itob() 返回时,对该内存的引用就会丢失。

关于正确的函数输出导致 printf 中产生垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17278218/

相关文章:

c - 如何更改结构体中指针指向的值?

python - 检查何时使用非阻塞打开发送所有数据

c - 求 C 语言中最大的数字,但带有字符

函数中的 PHP 命名空间全局关键字

c - 从函数返回数组/指针

c - 检查 printf 的返回值重要吗?

c - 如何在 C printf() 函数中显示变量?

c - memcpy 字符指针数组

c++ - Opencv C++到C接口(interface)函数转换

c - 警告 :0 flag ignored with precision and '%x' gnu_printf format