如果我包含stdlib.h,那么也无法识别itoa().我的代码:
%{
#include "stdlib.h"
#include <stdio.h>
#include <math.h>
int yylex(void);
char p[10]="t",n1[10];
int n ='0';
%}
%union
{
char *dval;
}
%token ID
%left '+' '-'
%left '*' '/'
%nonassoc UMINUS
%type <dval> S
%type <dval> E
%%
S : ID '=' E {printf(" x = %sn",$$);}
;
E : ID {}
| E '+' E {n++;itoa(n,n1,10);printf(" %s = %s + %s ",p,$1,$3);strcpy($$,p);strcat($$,n1);}
| E '-' E {n++;itoa(n,n1,10);printf(" %s = %s – %s ",p,$1,$3);strcpy($$,p);strcat($$,n1);}
| E '*' E {n++;itoa(n,n1,10);printf(" %s …Run Code Online (Sandbox Code Playgroud) 我试图在C中创建一个char数组,用int的数字填充它,但int可以是任意数量的数字.
我正在使用一个名为的创建函数getDigits(int num),它返回int所具有的多个数字.
char buffer[getDigits(number)] = "";
snprintf(buffer, sizeof(buffer),"%d",number);
Run Code Online (Sandbox Code Playgroud)
但是当我使用gcc编译时,它返回:
error: variable-sized object may not be initialized
我已经尝试了一切.当我宣布它时char fileSizeStr[5] = "";,它是有效的.当我尝试动态声明缓冲区大小时,我可以看到问题正在上升,但我真的想知道是否是实现此目的的一种方法.
QString::number(int)每秒多次打电话.它非常慢:似乎每次都分配一个新的字符串.尝试使用setNum相同的字符串代替,仍然没有喜悦.原来的长问题:
我有一大堆数字(比如整数),我想将它们格式化为文本,然后(可能不会立即)写入文件.天真的方式看起来像这样大约1:
QString allData;
foreach(const int & value, values) {
allData += QString::number(value);
allData += '\n';
}
Run Code Online (Sandbox Code Playgroud)
我机器上的150000整数需要大约280ms,这对我来说似乎很重要.我想这是因为被调用150000次并且每次都分配新的字符串.当我尝试使用(不分配内存)时,这被证实是问题的根源.QString::numberitoa
[not-cute]解决方案QString allData;
char buffer[100]; // <-------
foreach(const int & value, values) {
_itoa_s(value, buffer, sizeof(buffer), 10); // <-------
allData += buffer;
allData += '\n';
}
Run Code Online (Sandbox Code Playgroud)
对于相同的150000个整数(大约快4倍),这需要大约70ms,这对我来说是现在可以接受的(我想我也可以使用字符串连接做一些事情,但是让我们把它留在这个问题之外)
但我不喜欢我必须使用一些不标准的,可能已被弃用的,可能是不可移植的2功能(并不是说这看起来很难看).
然后我记得还有一个实例方法:QString::setNum.我希望我可以使用与以下相同的模式itoa:只分配一个字符串并每次修改它. …
我一直在寻找一种以可移植的方式将整数转换为字符串的方法(至少在Windows和Linux以及x86和x86_64之间可移植),我虽然itoa(X)是标准的atoi(1).
但我在维基百科条目中阅读了以下内容:
itoa函数是标准C编程语言的广泛非标准扩展.它不能被轻易使用,因为它没有在任何C语言标准中定义; 但是,编译器通常在处于非符合模式时通过头提供它,因为它是标准库函数atoi的逻辑对应物.
所以我想知道是否有任何方法可以以便携方式进行.如果我必须编写自己的函数,我必须小心哪些事情?
我有一个关于无符号整数的问题。我想将 unsigned int 转换为 char 数组。为此,我使用 itoa。问题是 itoa 可以正常处理 int,但不能处理 unsigned int(unsigned int 被视为普通 int)。我应该如何将 unsigned int 转换为 char 数组?
预先感谢您的帮助!
我目前正在使用支持ANSI C的PLC,但使用自己的GNU编译器,它不会编译任何可变函数和itoa之类的东西.所以使用sprintf&co.不是将整数转换为字符串的选项.任何人都可以引导我到一个网站,其中列出了强大的,无sprintf的itoa实现或在此发布合适的算法?提前致谢.
我正在尝试通过执行以下操作将an int转换为string:
int id = 12689;
char snum[MAX];
itoa(id, snum, 10);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
'itoa':不建议使用此项目的POSIX名称。而是使用符合ISO C和C ++的名称:_itoa。
我已经声明并初始化了两个变量,如下所示:
int a=5;
char* str;
str = (char*)calloc(255, sizeof(char));
Run Code Online (Sandbox Code Playgroud)
我想在标准C中将int转换为char*.我不能使用C++中的任何转换函数,例如itoa.
我正在使用Ubuntu 11.10
我可以itoa()用于将long long int转换为二进制字符串吗?我已经看到了使用int转换为二进制的各种示例itoa.如果我使用long long int,是否存在溢出或可能丢失精度的风险.
编辑 - 感谢大家的回复.我实现了我想做的事情.itoa()不够用,因为它不支持long long int.Moreover我不能在gcc中使用itoa(),因为它不是标准的库函数.
我想知道这是否安全/认可用法:
char pBuf[10];
itoa(iInt, pBuf, 10);
// pBuf value gets copied elsewhere
//memset(pBuf, 0, sizeof(pBuf)); // Is this necessary?
itoa(iInt2, pBuf, 10);
// pBuf value gets copied elsewhere
Run Code Online (Sandbox Code Playgroud)
我可以重用这样的缓冲区吗?