【问题标题】:Convert a number into string [duplicate]将数字转换为字符串[重复]
【发布时间】:2016-09-06 20:31:53
【问题描述】:

所以我正在编写一个简单的 c 代码,它将一个数字转换为一个字符串,但有一件事我不清楚。在此代码上:

    void itos(int a,char *p){
    int pom = a;
    do{
       p++;
       pom/=10;
    }while(pom);
    *p = '\0';
    do{
       pom = a%10 + '0';
       *--p = pom;
       a/=10;
      }while(a);
     }

我不断收到分段错误,我不明白为什么。字符串是通过地址传递的,所以 main 中的字符串不应该在函数中具有对字符串的访问权限吗?另一方面,这段代码运行良好:

     char *itos(int a,char *p){
     int pom = a;   
     do{
        p++;
        pom/=10;
     }while(pom);
    *p = '\0';
    do{
        pom = a%10 + '0';
        *--p = pom;
        a/=10;
    }while(a);
    return p;

   }

如果有人能解释我的差异(尤其是为什么第一个不起作用),我会非常感激。

【问题讨论】:

  • 两者只是返回值不同,请同时贴出调用该函数的代码
  • 已经得到答案。指针未正确初始化。感谢您的帮助!

标签: c


【解决方案1】:

这两个函数只是返回值不同,一个返回指针p,另一个什么都不返回。所以要确保你传入的指针被初始化为有效地址,即指向一个缓冲区:

char str[100];
itos(a, str);

char *str = malloc(100);
itos(a, str);

要将整数转换为字符串,只需打印即可:

char str[100];
int n;
snprintf(str, sizeof str, "%d", n);

【讨论】:

  • 哦,我不知道。但是我仍然很困惑为什么上面的代码不起作用..
  • @sale 传递给函数的指针是否被初始化?
  • 这解决了问题。非常感谢!
猜你喜欢
  • 2019-10-27
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 2019-02-21
  • 2017-12-15
相关资源
最近更新 更多