加载有空指针的字符数组的打印值
print value of char array which is loaded with void pointer
我有下面的代码,我将查雷克器数组的地址传递给函数"GetStr"。GetStr 函数原型是固定的。
在下面的代码中,我将字符串传递给函数"GetStr"的命令行参数并更新变量"str"地址中的值。
公关: 在打印 1 中,我正在获取从命令行参数传递的值。在主函数中打印 2,我无法打印或取回值。您能否告诉我如何在"打印2"语句中打印值
int GetStr(void *RetVal, int argc, char **argv)
{
if(argc != 0){
if(argv != NULL && argv[1] != ' '){
RetVal = argv[1];
}
else{
RetVal = ' ';
}
cout<< " RetVal: " << (char *)RetVal <<endl; ->>> PRINT 1
}
else{
return -1;
}
return 0;
}
司机:
int main(int argc, char **argv)
{
char str[8];
GetStr(str,argc,argv);
cout<<"HH: "<<((char *)(str))<<endl; ->>> PRINT 2
}
您必须使用strcpy()
来复制字符串。你只是将argv[1]
的地址分配给局部变量RetVal
,这对调用方中的数组没有影响。
您还应该检查argc
以确定是否已提供argv[1]
。
int GetStr(void *RetVal, int argc, char **argv)
{
if(argc != 0){
if(argv != NULL && argc >= 2){
strcpy((char*)RetVal, argv[1]); // copy first argument
}
else{
*(char*)RetVal = ' '; // Set to empty string
}
cout<< " RetVal: " << (char *)RetVal <<endl; ->>> PRINT 1
}
else{
return -1;
}
return 0;
}
请注意,在分配中通过RetVal
进行定向之前,必须强制转换它,因为您无法取消引用void
指针。
参数RetVal
是函数GetStr
的局部变量。它的更改不会影响传递给函数的原始参数。此外,由于原始参数是一个数组,因此数组没有赋值运算符。您必须将argv[1]
指向的字符复制到传递的数组中。
所以无论如何这个声明
RetVal = argv[1];
而这个
RetVal = ' ';
相对于传递的数组没有影响。目前还不清楚你在上面的第二个陈述中想做什么。或者要将指针设置为 NULL。或者,您希望将第一个指向的字节设置为无效的终止零字符,因为指针未取消引用,而且类型为void *
。
似乎在 if 语句中没有这个表达式
argv[1] != ' '
你的意思是要么
argv[1][0] != ' '
或
argv[1] != nullptr
无论如何,这两个if语句
if(argc != 0){
if(argv != NULL && argv[1] != ' '){
可以替换为一个 if 语句
if ( not ( argc < 2 ) )
该函数至少可以按以下方式查看
int GetStr( void *RetVal, int argc, char **argv )
{
int error = argc < 2 ? -1 : 0;
if ( not error )
{
strcpy( RetVal, argv[1] );
}
return error;
}
该函数不应输出除调试目的之外的任何内容。函数的调用方将决定是否输出消息(如果有(。
请注意,该函数是不安全的,因为传递的数组可能小于复制argv[1]
指向的字符串所需的值。
相关文章:
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 在一定长度后从数组中打印时缺少整数
- 数组元素打印的递归方法
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 打印矢量数组中的所有元素
- 打印问题.我在数组中打印值时遇到一些问题
- 数组类 阵列的打印输出
- 动态分配的聊天数组打印缺失的数据和空
- 如何打印 2D 字符数组C++
- 如何修改代码以打印出数组 v2
- 在C++中初始化和打印 2D 数组
- 将浮点数转换为无符号字符数组并打印出来
- C++ 打印包含数据结构的数组
- 如何让字符数组在一行而不是多行中打印出来?
- 打印字符数组地址的正确方法
- 按字母顺序打印存储在字符数组中的信息
- 使用递归反转和打印出数组的内容
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 加载有空指针的字符数组的打印值