直接将字符串传递给函数是不好的做法吗?
会导致内存错误吗?
for (index in 1:25) {
R <- ifelse(index %% nrow(df) == 0, nrow(df), index %% nrow(df))
C <- ifelse(index %% nrow(df) == 0, index / nrow(df), floor(index / nrow(df))+1)
print(df[R,C])
}
# 1
# 2
# 3
etc
或者这样做更安全吗?
func(char *x) {
//do stuff
}
func("String");
答案 0 :(得分:4)
会导致内存错误吗?
如果您尝试修改此字符串,则可能。
安全地宣布你的功能
func(const char *x) {
但是将字符串文字传递给函数并没有错。否则99.99的程序写得不好。
或者这样做更安全吗?
char *s = "string"; func(s);
将指针传递给相同的字符串文字
时,它不会改变任何内容但是下面的代码是安全的,因为你分配RW(读/写)内存以容纳字符串,系统将字面复制到这个分配的空间
char s[] = "string";
func(s);
答案 1 :(得分:2)
func(char *x) {
//do stuff
}
此函数将字符串上的指针作为输入。界面允许阅读&amp;从x
指出的数据写。
但是因为你正在使用字符串文字(在你的例子的两种情况下),修改这个字符串文字的内存是非法的(和大多数编译器一样, ex gcc
以阻止您这样做的方式组织代码/数据:SEGV)
“安全”的方式(只要你在写作时没有超出字符串限制 - 或者当然是阅读 - ):
char s[] = "string";
func(s);
或者如果您不打算修改s
中func
的内容,请将指针声明为const
:
func(const char *x)