(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函数。它实际上做了什么?
答案 0 :(得分:10)
它抛弃了const
。
这意味着如果my_print
修改该字符串,它会使您的程序崩溃,因为它的内存可能被标记为只读。因此,通过强制转换删除const
修饰符通常是一个坏主意。
在你的情况下,看起来有点像实现my_print
的人不认为要打印的字符串永远不会被修改,因此不会使它接受const char *
参数。 / p>
所以你应该做的不是演员而是改变my_print
的定义来接受const char *
而不是char *
作为它的第一个参数。
答案 1 :(得分:3)
那就是“类型转换”(或"type conversion")。换句话说,它告诉编译器将一种类型视为另一种类型。
此特定转换的作用是告诉编译器将常量字符串视为非常量。如果被调用的函数试图修改字符串,它可能无法工作,甚至可能使程序崩溃,因为修改常量数据是未定义的行为。
答案 2 :(得分:2)
它是一个类型转换,即它改变了数据类型。 (char *)表示类型转换为“指向char的指针”