二进制+(char *)和(char *)的操作数无效?

时间:2014-08-23 22:25:16

标签: c

为什么这段代码不打印两个字符串?我将5投5到(char *)所以我做错了什么?

int *p = 5;
char * str = "msg";
printf("string is: %s" + "%s", str, (char *) p);

1 个答案:

答案 0 :(得分:2)

您的代码会发出警告,例如:

  

main.c:5:12:警告:初始化使指针来自整数   没有演员[默认启用]

因为你尝试在没有强制转换的情况下为指针赋值。即使使用演员表,它也很少是您想要的,指向您提供的地址的指针。

我将提供一个示例,如果我声明一个用5初始化的变量a,然后将其地址分配给指针p

另外,请注意,与C ++和Java不同,C不为字符串提供+运算符。您必须使用string.h库进行此类操作。

[编辑](见评论,感谢Deduplicator)

#include <stdio.h>

int main() 
{
    int a = 5;
    // Assign the address of 'a' to the pointer 'p'.
    int *p = &a;
    // Now p points to variable 'a', thus 5.
    // The value of 'p' is the address of the variable 'a'.

    char const *str = "msg";

    // print the string 'str' and the number, that 'p'
    // points to. Since `p` is of type `int*`, we expect
    // it to point to an integer, thus we use %d in the
    // printf().
    printf("string is: %s%d", str, *p);

  return 0;
}

输出:

  

字符串是:msg5