C++ 打印在指向字符串的指针中获得的数据时出错
我试图调用一个接口函数并打印出结果值。函数原型包含指向作为参数的字符串的指针。当我打印出结果值时,我收到一些奇怪的符号。我下面的方法正确吗C++ 打印在指向字符串的指针中获得的数据时出错,c++,c,pointers,dll,printf,C++,C,Pointers,Dll,Printf,我试图调用一个接口函数并打印出结果值。函数原型包含指向作为参数的字符串的指针。当我打印出结果值时,我收到一些奇怪的符号。我下面的方法正确吗 int interfacecall(char *a, char *b ...); char * a= "Testdata"; char b [4098]; result= interfacecall(a,b); //different value is returned in b via function implementation in a thi
int interfacecall(char *a, char *b ...);
char * a= "Testdata";
char b [4098];
result= interfacecall(a,b);
//different value is returned in b via function implementation in a third party dll.
printf(b);
你的printf没有那么安全。应该是:
printf("%s", b); //corrected - safe!
<>在C++中,也可以使用<代码> STD::CUT< /COD> AS:
std::cout << b; //its simpler - must include<iostream>
嗯,为此我们需要知道
interfacecall
实际上做了什么…interfacecall做了什么?另外,尝试chara[]=“Testdata”
此外,char*a=“literal”
已被弃用,请使用const char*a=“literal”
或char a[]=“literal”
@Xeo:您是否有一个引用,用于将字符串文字地址弃用分配给指向char的指针?或者你的意思是它在C++
中被弃用了?我相信所有的C++
编译器都会抱怨,如果你试图给C
中的char(typechar*
)指针分配一个字符串文字(typeconst char[]
),字符串文字的类型是char[]
@pmg:Meh,忽略了lilC
标签。。。那么,我的最后一条评论只适用于C++
:)那么,您可以不使用格式字符串直接打印。这样做不太省钱,因为可以注入各种恶意代码。假设我分配一个大小为5000的数组。如果返回的数据最多只能填充2000个,并且我在4999处添加了一个空值,那么这会导致打印垃圾数据吗?@vij:在这种情况下,如果您不发布代码,我该如何帮助您?@vij:是的。从2001年到4998年都是垃圾!字符错误[4097];结果=callInterface(a,错误,…);错误[sizeof(error)-1]='\0';printf(错误);
b[slen] = '\0'; //you may have to do this explicitly!