c - 如何更改返回局部变量的函数
问题描述
我应该如何更改变量BinaryNumber
,所以该函数不会给我警告消息。我知道我无法返回内存的局部变量地址。我应该使用malloc
还是您认为我应该如何更改变量BinaryNumber
以便可以返回它?
char *Functoin_chang_string_ToBinary(char *Line) {
char *space = " ", *point = ",";
char BinaryNumber[Array_Size] = { "000000000000000" };
char *word = strtok(Line,"\"");
int num = 0, flag = 2, j = 11;
for (int i = 0; i < strlen(Line) - 1; i++) {
if (word[i] == '"') {
flag--;
i++;
}
num = word[i];
j = 14;
while (num != 0) {
BinaryNumber[j--] += (num % 2);
num /= 2;
}
printf("%s\n", BinaryNumber);
Fill_Struct_Binary_Machine_Code("", BinaryNumber);
strcpy(BinaryNumber, "000000000000000");
}
printf("%s\n", BinaryNumber);
Fill_Struct_Binary_Machine_Code("", BinaryNumber);
return BinaryNumber;
}
解决方案
尽管您可以使用malloc()
为BinaryNumber
字符串分配缓冲区(当然,这需要由调用者使用释放free()
),但更简单的方法是使用该strdup()
函数。
这将分配复制作为其参数(包括终止符)给出的字符串所需的确切内存量,并在一次调用中复制实际的字符串数据。nul
因此,您可以将函数的 return 语句更改为:
return strdup(BinaryNumber);
当然,调用者在使用完返回的数据后仍然需要调用free()
它(strdup
以与函数兼容的方式分配内存malloc
)。
推荐阅读
- rust - 传递引用的正确方法是什么?
- python - 如何从不同的电脑安装 Python 项目 requirements.txt?
- python - django中的值错误指的是什么,我被卡住了
- javascript - 如何在 Shopify 私有 APP 中发出 API 请求
- javascript - 从 Firebase 存储中获取 URL 照片时,等待新的 Promise 不起作用
- python - 存储在 mongoDB 中的 Django 'Dynamic' 对象
- react-native - 关于 react-native 中的 Svg 行,我可以将 x1、y1 设置为变量吗?
- uber-api - Uber Eats api 与餐厅经理应用程序的集成
- python - 如何使用 NLP 从评论中提取颜色?
- git - 将新代码库推送到现有仓库的分支