如何在 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);

第三种情况。

对于最后一种情况,第一个参数计算元素的数量,第二个参数将指针的值传递给指向charstr 的指针的值到changeStr


另外,我如何将它发送到freeStr?和我发送到change函数一样吗?

是的,但是在函数内部,您需要首先为每个单独的字符串释放分配的空间。之后你可以free() 指向char str 的指针数组。如果您首先free() 指向char 的指针数组,那么您将无法再释放字符串的内存,从而导致内存泄漏。

【讨论】:

以上是关于如何在 C 中更改字符串?的主要内容,如果未能解决你的问题,请参考以下文章

matlab如何批量更改文件名(删除每个文件名中的一段相同的字符串)

如何更改 kivymd 中其他 kv 字符串的属性?

在 C 循环中更改 char* 字符串

是否可以更改 C 中的字符集编码?

在C中用realloc()截断字符串?

复制分配期间的c ++字符串容量更改