我正在查看Xcode中的一些较旧的C代码,编译器警告我:
Incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'; take the address with &
在此行...
char *orig_str;
...
strncpy(buff, card->orig_str[1], 2);
如果在行的开头发现注释标记'
,它将尝试复制接下来的两个字符。
我认为问题是card->orig_str[1]
是char
而不是char *
。 &card->orig_str[1]
解决了这个问题。我认为即使card-> orig_str为free
d,buff也是安全的,因为它是副本。我是C语言的新手,想确保这是正确的解决方法?
您的问题归结为“我如何编写一个返回与另一个指针偏移的指针的表达式?”根据您的情况,您需要一个指向card->orig_str
指向的字符串中第二个字符的指针。
嗯,这样做吧:
strncpy(buff, card->orig_str + 1, 2);
无需阅读和理解更复杂的
&(card->orig_str)[1]
。无论如何,它将生成相同的代码。
有趣的事实:3 + "abcde"
返回一个指向字符串文字中'd'的指针。但是,请勿使用此类代码。
memcpy()
个字符,strncpy()
和n-1
的行为相同。请查看其文档(在Linux man memcpy
上)以了解详细信息。我将使用strncpy()
,因为您正在处理字符串,而不是某些“无类型”数据。
无论如何
如果您打算将buff
用作字符串,则需要添加EOL字符!如果复制了2个字符,则strncpy()
将not附加给您。这可能很简单:buff[2] = '\0';