【发布时间】:2017-05-23 20:53:09
【问题描述】:
例如:
void foo1(char *buffer) {
buffer[0] = 'a';
}
char *foo2(char *buffer) {
buffer[0] = 'a';
return buffer;
}
当我想修改一个字符串时,我可以这样做:
mystr[] = "foobar";
foo1(mystr);
printf("%s",mystr);
或使用返回值:
mystr[] = "foobar";
char *mystr2;
mystr2 = foo2(mystr);
printf("%s",mystr2);
我对第二种方式有点困惑:mystr 和 mystr2 指向不同的位置但持有相同的字符串。我以为 foo2 在返回时会将修改后的 mystr 的地址复制到 mystr2 中。会发生什么?
第二个问题是:哪种修改字符串的方式更标准?
【问题讨论】:
-
第二个例子中
mystr被修改,mystr2指向mystr。尝试在第二个示例中打印mystr。 -
不清楚且范围广泛。每个问题一个问题。
-
至于你的第二个问题,答案是:两者都没有。哪一个是“最好的”(高度主观的)取决于您的用例。用第二个你可以做例如
printf("%s", foo2(mystr))这可能在某些情况下有用,但在其他情况下则不然。 -
@Olaf - 问题足够清楚,并且密切相关,不会违反您引用的任何规则。
-
@ryyker:第二个问题不相关,征求意见。我说它太宽泛了,因为可以根据用例提出建议。因此,如果您称其为“基于意见”,那我很好。
标签: c string function pointers