gpt4 book ai didi

c - 在函数内部修改字符串地址

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:55 25 4
gpt4 key购买 nike

我在 main() 中有字符串

char *string = NULL;

然后我有一个函数

foo(char *s){
s = realloc( ... );
..
}

如果字符串不够长,我想做的是为字符串重新分配内存,所以当我在 main() 中访问这个函数时,我必须把它写成 foo(&string)foo(字符串)?

它会在 foo() 函数之外更改 s 的地址吗?

最佳答案

  1. 字符串不是指针、数组或类似的东西。

    C 中的字符串被定义为由零元素终止的非零元素序列,除非另有说明 char 类型。
    这些字符串通常保存在数组中,数组名称用于通俗地引用它们。

    因此,您没有main() 中有一个字符串。

  2. C 是严格按值传递的,这意味着您永远不能修改用于从函数内部初始化函数参数的表达式。

    但它也有指针,因此您可以传递对象的地址以启用修改该对象。

顺便说一句,不要使用过时的隐式 int 返回类型。

将所有这些放在一起,您有:

#include <string.h> // strcpy
#include <stdlib.h> // realloc free abort
#include <stdio.h> // puts

void foo(char** sz) {
const static hw[] = "Hello world!";
*sz = realloc(*sz, sizeof hw);
if(!*sz) abort();
strcpy(*sz, hw);
}

int main() {
char* sz = 0; // Pointer for a string
foo(&sz);
puts(sz);
free(sz); // Superfluous cleanup
}

关于c - 在函数内部修改字符串地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27455038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com