为什么这段代码不打印两个字符串?我将5投5到(char *)所以我做错了什么?
int *p = 5;
char * str = "msg";
printf("string is: %s" + "%s", str, (char *) p);
答案 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