【发布时间】:2012-04-22 10:52:21
【问题描述】:
试图让'sval'包含字符串“$1” - 数组索引0-499的“$500”。在下面的代码中,但是 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 到字符串时得到的结果
【问题讨论】:
-
为什么?告诉我,为什么
**d?????只是为了让你可以做(*d)[i]?真的吗?! -
您不应同时使用
malloc和new。顺便说一句,malloc应该用sizeof(data_t)*500而不是500调用。但更好的是,你永远不应该在 C++ 中使用malloc,它只是为了与 C 兼容。 -
@littleadv 不是我的代码:这是一个面试测试,它可以让我失望
-
我建议查看
std::istringstream。 -
@Sun 不,您还需要 4 年的经验。这不是他们在大学里要教给你的东西(如果是的话 - 去另一所大学,在学校学习这个是在浪费你的上学时间)。