【发布时间】:2016-09-23 02:31:51
【问题描述】:
我在main 中有一个string,我想将该字符串的地址传递给将编辑该字符串内容的函数。我不想使用 malloc。
我的代码目前如下所示:
int main(){
char* str = "Hello";
char* para1[] = {"Tea", "Coffee"};
printf("str: %s\n para1: %s\n", str, para1[0]);
my_func(str, ¶1);
printf("str: %s\n para1: %s\n", str, para1[0]);
return 1;
}
int my_func(char* str, char** para1){
printf("str: %s\n", str);
str[0] = 'W';
para1[0] = "Popcorn";
return 1;
}
我不明白如何将字符串的第一个字母从H 更改为W
你能解释一下我做错了什么吗?
【问题讨论】:
-
1)
char* str = "Hello";-->char str[] = "Hello";2)my_func(str, &para1);-->my_func(str, para1);另外你必须有一个原型才能使用这个功能。 -
@BLUEPIXY 在 C89 中,这个函数可以在没有原型的情况下调用,不幸的是,即使现代编译器仍然默认为 C89 模式,可能没有警告
-
你可以定义一个像
typedef struct { char data[80]; } punchcard_t这样的punchard类型并将字符串作为punchcard_t传递给函数,并让它返回punchcard_t(字符串长度被保留,不像通过引用传递)。否则,您需要 malloc 或 malloc 的本地静态内存池实现,因为您无法返回指向本地数据的指针,因为它的生命周期已到期。这是有效的,因为结构充当字节数组的包装器,因此将其结构保留为输入类型和返回类型(而您不能“返回”char[80])。 -
永远不要使用制表符进行缩进。每个文字处理器/编辑器都为个人喜好设置了制表位/制表位宽度。建议为每个缩进级别使用 4 个空格,因为它足够宽,即使使用可变宽度字体也可以看到,并且允许整个页面有多个缩进级别
标签: c string function pointers c-strings