Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在没有itoa()的情况下将任何变量更改为字符串?_C_Function_C Strings - Fatal编程技术网

C 如何在没有itoa()的情况下将任何变量更改为字符串?

C 如何在没有itoa()的情况下将任何变量更改为字符串?,c,function,c-strings,C,Function,C Strings,在许多语言中,将任何变量转换成不同的类型都非常容易,这让我想到了另一个转换函数,它应该像Python中的str() 所以我发现itoa()是一个函数,它将int转换为char*(string): 因此,我改为使用名为make_str()的函数,尽管我还没有将变量转换为字符串的计划: char *make_str(void *var) { } Q:我可以使用哪些其他函数将变量更改为字符串? 不,不是浮点值,只有int 在C语言中,char变量实际上是int。所有char变量都有一个数值

在许多语言中,将任何变量转换成不同的类型都非常容易,这让我想到了另一个转换函数,它应该像Python中的
str()

所以我发现
itoa()
是一个函数,它将
int
转换为
char*(string)

因此,我改为使用名为
make_str()
的函数,尽管我还没有将变量转换为字符串的计划:

char *make_str(void *var) {
    
}
Q:我可以使用哪些其他函数将变量更改为字符串?

不,不是浮点值,只有
int


在C语言中,
char
变量实际上是int。所有char变量都有一个数值。您可以使用它来转换。在ASCII中,数字代码如下所示:
48. '0'
49. '1'
50. '2'
51. '3'
52. '4'
53. '5'
54. '6'
55. '7'
56. '8'
57. '9'

例如,int 48表示字符“0”。因此,您可以使用以下代码:

#include <stdio.h>

#include <math.h>

int main(void) {

  int entry, copy, count, dividing = 1, size = 0;
  char IntToChar[50];

  printf("Enter an integer: ");
  scanf("%d", & entry);

  copy = entry;
  if (copy != 0) {
    while (copy != 0) {
      ++size; /*to calculate how many number entry has*/
      copy /= 10; /*for example, if you divide 17(for int, not float) to 10, the result is 1*/
    }
  } else
    size = 1; /*possibility of entry to be 0*/

  for (count = 0; count < (size - 1); ++count)
    dividing *= 10;

  copy = entry; /*assignment again*/

  for (count = 0; count < size; ++count) {
    IntToChar[count] = '0' + (copy / dividing);
    copy %= dividing;
    dividing /= 10;
  }
  IntToChar[count] = '\0'; /*adding end of string*/

  printf("%s", IntToChar);

  return 0;
}
#包括
#包括
内部主(空){
int entry,copy,count,divising=1,size=0;
char IntToChar[50];
printf(“输入一个整数:”);
scanf(“%d”,条目(&T);
复制=输入;
如果(复制!=0){
while(复制!=0){
++size;/*计算输入的数字数量*/
copy/=10;/*例如,如果将17(对于int,不是float)除以10,结果是1*/
}
}否则
大小=1;/*输入的可能性为0*/
对于(计数=0;计数<(大小-1);++计数)
除法*=10;
复制=输入;/*再次分配*/
用于(计数=0;计数<大小;++计数){
IntToChar[count]=“0”+(复制/分割);
复制%=分割;
除以/=10;
}
IntToChar[count]='\0';/*添加字符串结尾*/
printf(“%s”,IntToChar);
返回0;
}

例如,条目为913。因此,size将是3,除法将是100。如果我们除以复制除以,结果是9。如果我们把48('0')和9相加,得到57('9')。然后,copy%=divising是13,如果我们把13除以10,它是1,我们把1和48('0')相加,结果是49('1')。我希望能有所帮助。

你试过使用?
sprintf()
,从C99开始,我就想到了
itoa()任何版本的C标准,甚至POSIX都没有描述
。@BPML如果您对“输出函数”的评论是指
sprintf
snprintf
,那么您就错了。检查
printf
(或
fprintf
)和
sprintf
之间的差异。对于将问题标记为重复问题的人员:请在执行此操作之前阅读这两个问题。你,再一次,联系到一个完全不同的问题。链接的问题是关于Linux的,这个问题不是关于Linux的,当OP在一个RAM和ROM非常少的系统上,
printf()
-系列需要太多RAM或ROM时,这可能是相关的。如果可以使用
'0'
,为什么要使用一些
48
?使用幻数会使代码的可读性差得多,并且依赖于字符编码。
char *make_str(void *var) {
    
}
#include <stdio.h>

#include <math.h>

int main(void) {

  int entry, copy, count, dividing = 1, size = 0;
  char IntToChar[50];

  printf("Enter an integer: ");
  scanf("%d", & entry);

  copy = entry;
  if (copy != 0) {
    while (copy != 0) {
      ++size; /*to calculate how many number entry has*/
      copy /= 10; /*for example, if you divide 17(for int, not float) to 10, the result is 1*/
    }
  } else
    size = 1; /*possibility of entry to be 0*/

  for (count = 0; count < (size - 1); ++count)
    dividing *= 10;

  copy = entry; /*assignment again*/

  for (count = 0; count < size; ++count) {
    IntToChar[count] = '0' + (copy / dividing);
    copy %= dividing;
    dividing /= 10;
  }
  IntToChar[count] = '\0'; /*adding end of string*/

  printf("%s", IntToChar);

  return 0;
}