C—复制包含'\0';到另一个字符数组,消除'\0';
是否有任何C库函数可以将C—复制包含'\0';到另一个字符数组,消除'\0';,c,null,char-pointer,C,Null,Char Pointer,是否有任何C库函数可以将字符数组(包含一些'\0'字符)复制到另一个字符数组,而不复制'\0'? 例如,“he\0ll\0o”应复制为“hello”否,没有库函数可以执行此操作。你必须自己写 但有一个问题:您如何知道何时停止忽略\0?您的字符串(“he\0ll\0o”)有三个零字节。您如何知道在第三个位置停止?“字符串中的'\0'是一种查找字符串结尾(字符串的终止字符)的方法。因此,所有为字符串操作设计的函数都使用“\0”来检测字符串的结尾 现在,如果您想要像您所要求的那样实现,您需要自己设计。
字符
数组(包含一些'\0'
字符)复制到另一个字符
数组,而不复制'\0'
?例如,
“he\0ll\0o”
应复制为“hello”
否,没有库函数可以执行此操作。你必须自己写
但有一个问题:您如何知道何时停止忽略
\0
?您的字符串(“he\0ll\0o”
)有三个零字节。您如何知道在第三个位置停止?“字符串中的'\0'是一种查找字符串结尾(字符串的终止字符)的方法。因此,所有为字符串操作设计的函数都使用“\0”来检测字符串的结尾
现在,如果您想要像您所要求的那样实现,您需要自己设计。您将面临的问题是:
1) 如何确定哪个“\0”用作终止字符?
因此,对于这种实现,您需要显式地告诉用作终止字符的“\0”的计数,或者您需要为字符串设置自己的终止字符。
2) 对于实现中的任何其他操作,您不能使用预定义的字符串相关函数。
因此,实现您自己的功能来执行这些操作 只要您知道字符数组的长度,那么:
void Copy(const char *input, size_t input_length, char *output)
{
while(input_length--)
{
if(input!='\0')
*output++ = input;
input++;
}
*output = '\0'; /* optional null terminator if this is really a string */
}
void test()
{
char output[100];
char input = "He\0ll\0o";
Copy(input, sizeof(input), output);
}
你能发布一些代码吗?您是否定义了这些字符串,因为如果您这样做,那么在字符串中间包含字符串终止符无疑是糟糕的设计。这表明你并不真正理解字符串,或者更准确地说,
char
数组在C语言中是如何工作的。这并不是说我想在其中包含字符串终止符,但我必须这样做,我被要求这样做,尽管这是一个糟糕的设计。你知道char数组有多长吗?@Neil是的,我知道大小。别忘了在末尾添加一个空字节。@dbush我考虑过,但我不认为这些是真正的字符串,它们是已知大小的内存块。