C 如何在没有itoa()的情况下将任何变量更改为字符串?
在许多语言中,将任何变量转换成不同的类型都非常容易,这让我想到了另一个转换函数,它应该像Python中的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变量都有一个数值
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;
}