0

(char* )str下面的代码做了什么?

/**
 * Main file 
 */
#include <assert.h>
#include <mylib.h>

int main()
{
  const char str[] = "this is my first lab\n";
  int ret=1; 

  ret = my_print((char *)str, sizeof(str));

  assert(!ret);

  return 0;
}

这段代码是我的导师写的。my_print 是一个函数,它接收指向字符串的指针和该字符串的大小。我很困惑为什么我们必须使用 (char *)str 将字符串传递给 my_print 函数。它实际上是做什么的?

4

3 回答 3

10

它抛弃了const.

这意味着如果修改该字符串,它会使您的程序可能崩溃,my_print因为它的内存可能被标记为只读。因此,const通过强制转换移除修饰符通常不是一个好主意。

在您的情况下,它看起来有点像实施者my_print不认为要打印的字符串永远不必修改,因此不会使其接受const char *参数。

所以你应该做的是改变定义my_print以接受 aconst char *而不是 achar *作为它的第一个参数。

于 2013-03-08T11:44:00.813 回答
4

那就是“类型转换”(或“类型转换”)。换句话说,它告诉编译器将一种类型视为另一种类型。

这个特定的转换所做的是告诉编译器将常量字符串视为非常量。如果被调用的函数试图修改字符串,它可能不起作用,甚至可能导致程序崩溃,因为修改常量数据是未定义的行为

于 2013-03-08T11:44:22.730 回答
2

它是一种类型转换,即它改变了数据类型。(char*) 表示类型转换为类型“指向字符的指针”

于 2013-03-08T11:44:10.220 回答