正在尝试让“sval”包含字符串“$1”-“$500”,用于数组索引0-499。在下面的代码中,itoa在下面的代码中给出了奇怪的字符串:
#include<iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct data_t {
int ival;
char *sval;
} data_t;
void f1(data_t **d);
int main()
{
data_t *d;
d=static_cast<data_t*>(malloc(500)); //is this even needed?
d = new data_t[500];
f1(&d);
}
/* code for function f1 to fill in array begins */
void f1(data_t **d)
{
int i;
char str[5];
for (int i=0; i<500; i++)
{
(*d)[i].ival=i+1;
itoa (i,str,10);
(*d)[i].sval= str;
}
}itoa似乎也被贬低了,但这是我在谷歌上搜索int to string时得到的
发布于 2012-04-10 14:06:56
你不需要ltoa,cout就可以了。为什么需要将数字及其字符串表示保留在数组中?当您执行cout << 10时,您将在输出中得到"10“,您自己不需要任何转换
另一方面,您在没有为字符串分配任何内存的情况下执行ltoa,正如您可能已经注意到的那样,这是不健康的。您使用一个局部变量(对于所有500个数组成员都是相同的),在退出函数后尝试访问该变量-这是一个很大的禁忌,因为它的行为是未定义的。
和:
d=static_cast<data_t*>(malloc(500)); //is this even needed?
d = new data_t[500];不是的。不仅不需要--根本不应该出现在那里!在C++中-使用new和delete,而不是malloc,这是一个C函数。
https://stackoverflow.com/questions/10083830
复制相似问题