如何在 C 中更改字符串?
Posted
技术标签:
【中文标题】如何在 C 中更改字符串?【英文标题】:How I change string of strings at C? 【发布时间】:2020-11-11 17:37:40 【问题描述】:我有一串要发送到函数并更改字符串的字符串。
如何将字符串发送到函数?使用 2 个 *
还是使用 3 个 *
?例如:
我想更改并添加str[0]
和str[1]
。如何将其发送到函数?
另外,如何发送到freeStr
?和发送到change函数一样吗?
int main(void)
char **str = (char **)malloc(sizeof(char*) * 3);
str[0] = (char *)malloc(sizeof(char) * 10);
str[1] = (char *)malloc(sizeof(char) * 10);
changeStr(str);
freeStr(str);
void changeStr(/* ... */)
【问题讨论】:
如果您尝试不同的替代方案,计算机不会崩溃。如果你使用-Wall -Wextra
编译,编译器很可能会在你做错任何事情时警告你。
free
你是什么malloc
(或calloc
甚至可能是realloc
) .... 你有str[0] = (char*)malloc(sizeof(char)*10);
所以你需要free(str[0])
... 你有@987654335 @所以你需要free(str);
对malloc()
的返回值的强制转换充其量是多余的,并且它可能隐藏编译器本来会捕获的错误。
相关:***.com/questions/1733881/…
不相关:首选 int main(void) ...
作为您的主要功能
【参考方案1】:
如何将字符串发送到函数? 2个
*
还是3个*
?
首先,changePtr
的定义/声明中的参数必须与两个 *
(char **
) 或分别与一个 *
一起使用,并且您在数组声明器中处理元素的数量,这也会获得指向char
(char *p[] == char **p
) 的指针。
// Definition of changeStr.
void changeStr (char** p)
// some stuff going on here.
或
// Definition of changeStr.
void changeStr (char* p[])
// some stuff going on here.
或
// Definition of changeStr.
void changeStr (size_t elem, char* p[elem])
// some stuff going on here.
三重指针被认为是不好的做法,这里并不真正需要其中之一。这会让事情变得更加复杂。
你这样调用函数
changeStr(str);
对于第一种和第二种情况,并且
changeStr(sizeof(str) / sizeof(*str), str);
第三种情况。
对于最后一种情况,第一个参数计算元素的数量,第二个参数将指针的值传递给指向char
str
的指针的值到changeStr
。
另外,我如何将它发送到
freeStr
?和我发送到change函数一样吗?
是的,但是在函数内部,您需要首先为每个单独的字符串释放分配的空间。之后你可以free()
指向char
str
的指针数组。如果您首先free()
指向char
的指针数组,那么您将无法再释放字符串的内存,从而导致内存泄漏。
【讨论】:
以上是关于如何在 C 中更改字符串?的主要内容,如果未能解决你的问题,请参考以下文章