c - 处理C中字符数组的引用传递
问题描述
当我像这样使用时,我想更改字符数组的值
char *str;
fun(str);
void fun(char *str) {
str = (char *) ("changed");
}
它没有做任何事情并且 str 为 null
而以这种方式
char *str;
fun(&str);
void fun(char **str) {
*str = (char **) ("changed");
}
一切都会好起来的。但是我有一个限制,将函数定义为 void fun(char *str),如何使用这个用例更改值
解决方案
我想改变字符数组的值
,fun(char *str)
是str
一个指针。要更改字符数组的值,请不要更改指针str
。改变内存str
指向的内容。
void fun(char *str) {
// str = (char *) ("changed");
str[0] = 'c';
str[1] = 'h';
str[2] = 'a';
str[3] = 'n';
str[4] = 'g';
str[5] = 'e';
str[6] = 'd';
str[7] = '\0';
// or simply
strcpy(str, "changed");
}
确保调用时指针引用可用空间
char buffer[100] = "Before";
printf("<%s>\n", buffer);
fun(buffer);
printf("<%s>\n", buffer);
推荐阅读
- django - Django:使用 Ajax 将上下文传递到模板中
- javascript - 需要像 youtube 建议的主题一样构建自定义水平滚动
- c - 是否可以直接从文件中读取任何特定数据?
- sql - SQL 选择大于创建时的 id 的 id
- active-directory - 如何以最终用户身份查询 Azure Active Directory
- java - 我应该在 JPA 中双向使用 N:1 吗?
- reactjs - TypeError:无法读取 null 的属性“__reactInternalInstance$3z9puccztwe”
- php - PHP - 函数不等于这个回声?
- asp.net-mvc - 如何根据数据模型值禁用按钮?
- asp.net - 在页面加载时从服务器提供 ListItem 焦点