我试过这个例子:
/* itoa example */
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i;
char buffer [33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,buffer,10);
printf ("decimal: %s\n",buffer);
itoa (i,buffer,16);
printf ("hexadecimal: %s\n",buffer);
itoa (i,buffer,2);
printf ("binary: %s\n",buffer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但那里的例子不起作用(它表示该功能itoa不存在).
itoa()是一个非常方便的函数,可以将数字转换为字符串.Linux似乎没有itoa(),是否有相同的功能或我必须使用sprintf(str, "%d", num)?
由于printf不是可重入的,因此在信号处理程序中使用它并不安全.但我已经看到很多使用printf这种方式的示例代码.
所以我的问题是:我们何时需要避免printf在信号处理程序中使用,是否有推荐的替代品?
我正在使用该itoa()函数转换int为string,但它给出了一个错误:
undefined reference to `itoa'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
是什么原因?还有其他方法可以执行此转换吗?
我想write在信号处理程序内使用(或任何异步安全函数)将数字打印到日志或终端中.我宁愿不使用缓冲I/O.
是否有一种简单而推荐的方法可以做到这一点?
例如代替printf,我更喜欢write(或任何asyn安全功能).
void signal_handler(int sig)
{
pid_t pid;
int stat;
int old_errno = errno;
while((pid = waitpid(-1, &stat, WNOHANG)) > 0)
printf("child %d terminated\n", pid);
errno = old_errno;
return;
}
Run Code Online (Sandbox Code Playgroud)
打印字符串很容易.代替printf上面我可以使用(不打印pid):
write(STDOUT_FILENO, "child terminated", 16);
Run Code Online (Sandbox Code Playgroud) 通过"人类可读的序列化格式"我的意思是YAML,JSON,INI或喜欢.请注意,XML对于我的目的来说,太冗长和太不方便了,所以让我们把它作为最后的手段.
格式应将数据存储为"命名键 - 值"对,并允许嵌套和数组.但是,缺少数组并不重要.此外,非常感谢类型感知(不仅将数据作为普通字符串返回的能力).
我真正需要的是一个纯C库,它提供了一个用于解析数据的API(编码是可选的,不太重要).在为ARM7编译时,它必须适合大约16-20 KiB.
我已经用Google搜索并在周围徘徊,但找不到满足上述所有要求的工件.
我试图在char数组中存储一个整数.我怎样才能做到这一点?这是我的方法(通过将其转换int为a char),但它不起作用.我错过了什么?
#include <stdio.h>
int main(int argc, char** argv)
{
char cArray[10] = {};
// Store a character in the char array
cArray[5] = 'c';
printf("%c\n", cArray[5]);
// Store an integer in the char array
cArray[6] = (char) 0; // WHY DOES THIS NOT WORK???
printf("%c\n", cArray[6]);
}
Run Code Online (Sandbox Code Playgroud)