怎么把字符串传给函数?

怎么把字符串传给函数? - 图1

你知道了怎么把一些简单的值以参数的形式传给函数,但如果想传一些更复杂的东西呢?比如字符串。如果你还记得上一章的内容,就知道在C语言中字符串其实是字符数组,也就是说如果你想把字符串传给函数,可以这么做:

怎么把字符串传给函数? - 图2

你把参数msg定义为数组,但是因为不知道字符串有多长,所以msg没有长度。这似乎很简单,但奇怪的事发生了……

亲爱的,谁截了我们的字符串?

C语言中有一个叫sizeof的运算符,它能告知某样东西在存储器中占多少字节,既可以对数据类型使用,也可以对某条数据使用。

怎么把字符串传给函数? - 图3

但当你检查传入函数字符串的长度时,离奇的事情发生了:

  1. void fortune_cookie(char msg[])
  2. {
  3. printf("Message reads: %s\n", msg);
  4. printf("msg occupies %i bytes\n", sizeof(msg));
  5. }

怎么把字符串传给函数? - 图4

程序并没有显示字符串总长,而是返回了4或8个字节。发生了什么事?为什么fortune_cookie()认为我们传进来的字符串比实际要短?

怎么把字符串传给函数? - 图5脑力风暴

你认为是什么原因导致sizeof(msg)小于整个字符串的长度?msg是什么?为什么在不同的计算机上返回的大小不同?