【发布时间】:2014-03-14 20:45:54
【问题描述】:
std::fread 的语法:
size_t fread(void * ptr, size_t size, size_t count, FILE * stream);
我们可以使用字符指针调用 std::fread 并使用相同的字符指针获取读取的数据。 例如:
char* data;
fread(data,5,10,file);
我尝试创建一个类似的函数,它接受一个字符指针作为 void* 指针。
#include <iostream>
#include<string.h>
using namespace std;
void modify(void* ptr)
{
char* temp = new char[50];
strcpy(temp,"testing");
__ptr=(void*)temp;
std::cout<<"__ptr="<<(char*)__ptr<<endl;
}
int main()
{
char* str;
modify(str);
cout<<"str="<<str;
return 0;
}
我用http://www.compileonline.com/compile_cpp11_online.php 尝试了上面的代码,我得到了输出
__ptr=testing
str=
(a)为什么 str 没有打印字符串“testing”?
我将动态分配变量的地址分配给 ptr。 因此,即使控件从方法返回后,堆中的值“testing”也必须可用。
(b)我怎样才能修改函数,这样我就可以得到输出
__ptr=测试
str=测试
但是函数原型不能修改。
请帮忙。
希望问题很清楚。
【问题讨论】:
-
标题与正文不匹配,随机指针滥用会产生随机结果。不是一个有用的问题。
-
此代码在没有警告/错误的情况下无法编译 (ideone.com/yrOcHS)。请先解决这个问题,然后我们可以重新访问。
-
这基本上是
C,如果你想以C++的方式做事,你应该使用迭代器和流。 -
@MSalters..实际上我正在为 fread 函数编写一个包装函数。我只是在一个简单的例子的帮助下缩短了这个问题。 “随机指针虐待”你能帮我解释一下你为什么这样说吗?如果您是对的,那么我认为您的回答可能会帮助我解决问题。 :)
-
这甚至不会编译。没有引用要调用的
char*的函数。如果这适合您,请告诉我们您的工具链是什么(如果是 TurboC++,我不会对它接受的废话感到惊讶)。
标签: c++