我正在使用第三方应用程序创建的 .lib 文件。头文件列出了该 Lib 文件中使用的所有函数。使用 .lib 文件,从该应用程序读取值并向其写入值。它们有不同的方法来读取和写入整数值、小数值和字符串。该方法是用 C 语言定义的。不幸的是我没有这些方法的任何详细文档。我使用该方法来检索整数和小数值。当我使用返回字符串值的方法时遇到问题。
例如,在lib.h文件中,方法名称如下
int GetIntData(char *Var, int *data);
int GetDecData(char *Var, double*data);
int GetDataString(char *aName, char*data , int size);
这里 Var- 表示保存该值的变量的名称。如果我想获取泵开关状态的值。我使用下面的方法
int value;
GetIntData("PUMP1",&value);
int status = value;
以同样的方式我可以获得十进制数据和字符串。我需要获取存储在 PUMPN 变量中的泵的名称。我试过这个
char *sData;
GetDataString("PUMPN ",&sData,10);
但是在编译过程中,显示错误为
cannot convert parameter 2 from 'char **' to 'char *'
所以我尝试了这个
char *sData;
GetDataString("PUMPN ",sData,10);
它在编译期间不显示错误,但在执行时突然停止并显示“应用程序不工作”,可能是该 .lib 文件中未正确定义错误处理。
我只是想确定一下问题是否出在我这边。这是使用字符指针表示字符串的方法吗?
最佳答案
问题如下:
char *sData;
GetDataString("PUMPN ",&sData,10);
But during compilation, it shows error as
GetDataString 期望 char* 并通过传递 &sData,您将传递 char**,因为 sData 已经是 char*。
问题如下:
char *sData;
GetDataString("PUMPN ",sData,10);
您正确地将 char* 传递给 GetDataString,但由于您没有分配任何内存,您会看到崩溃,要解决此问题,请执行以下操作:
char *sData = malloc(10);
GetDataString("PUMPN ",sData,10);
注意:您需要检查 GetDataString 期望的缓冲区大小,并将该大小的缓冲区大小传递给它。
关于c - 返回 C 中的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682234/