C中的复制字符串跳过前导字符

问题描述 投票:-4回答:1

我正在查看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语言的新手,想确保这是正确的解决方法?

c
1个回答
0
投票

您的问题归结为“我如何编写一个返回与另一个指针偏移的指针的表达式?”根据您的情况,您需要一个指向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';
© www.soinside.com 2019 - 2024. All rights reserved.