(char *)在C中做什么?

时间:2013-03-08 11:42:41

标签: c string pointers char

(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函数。它实际上做了什么?

3 个答案:

答案 0 :(得分:10)

它抛弃了const

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

在你的情况下,看起来有点像实现my_print的人不认为要打印的字符串永远不会被修改,因此不会使它接受const char *参数。 / p>

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

答案 1 :(得分:3)

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

此特定转换的作用是告诉编译器将常量字符串视为非常量。如果被调用的函数试图修改字符串,它可能无法工作,甚至可能使程序崩溃,因为修改常量数据是未定义的行为

答案 2 :(得分:2)

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