将字符串直接传递给函数

时间:2017-08-07 22:29:38

标签: c string function parameters

直接将字符串传递给函数是不好的做法吗?

会导致内存错误吗?

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");

2 个答案:

答案 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);

或者如果您不打算修改sfunc的内容,请将指针声明为const

func(const char *x)