c - 我不明白为什么我的 WRITE 函数(C 语言)不能使用字符 ('c' )?

标签 c

此代码有效:

void main (void)
{
    write (1, "1", 1);
}

这个也有效:

void putchar(char c)
{
    write (1, &c, 1);   
}
void main (void)
{
    putchar('1');
}

但是这个没有:

void main (void)
{
    write (1, '2', 1);
}

第二段代码中,c是一个字符(不是指针),为什么c之前有&?

最佳答案

可能你的write函数看起来像

write(int a, char *string, int b)

所以它期望指针作为第二个参数。第一种和第二种情况适合它,但最后一种将 char (不是指向 char 的指针)作为第二个参数传递

编辑:

正如 mch 所写,原型(prototype)是 ssize_t write(int fildes, const void *buf, size_t nbyte); 所以第二个参数必须是指针,而不是 char

注意:"A" 被视为字符数组 {'A', '\0'},&cchar 类型变量的地址 (因此它仍然适合需要指向 char 的指针的函数),但 'A' 是单个字符,因此不适合。

关于c - 我不明白为什么我的 WRITE 函数(C 语言)不能使用字符 ('c' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39831803/

相关文章:

c++ - CUDA C - 从 cutil.h 到 helper_cuda.h 的库错误

c - 第 98 次调用 pthread_create() 失败

c - 指向共享变量的指针互斥

c - C多维数组和解引用数组指针

c - 错误: member reference base type '*****' (aka '*****' ) is not a structure or union

c - time.h 中的 tzset 和 daylight 全局变量解释

c - "Dynamic (pointer) arrays"跨函数

c - scanf 取一个 struct 元素的值在 C linux 中给出 seg 错误

.net - 需要 C#/C++ DLL 建议

c - Makefile - 包含库