Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C—复制包含'\0';到另一个字符数组,消除'\0';_C_Null_Char Pointer - Fatal编程技术网

C—复制包含'\0';到另一个字符数组,消除'\0';

C—复制包含'\0';到另一个字符数组,消除'\0';,c,null,char-pointer,C,Null,Char Pointer,是否有任何C库函数可以将字符数组(包含一些'\0'字符)复制到另一个字符数组,而不复制'\0'? 例如,“he\0ll\0o”应复制为“hello”否,没有库函数可以执行此操作。你必须自己写 但有一个问题:您如何知道何时停止忽略\0?您的字符串(“he\0ll\0o”)有三个零字节。您如何知道在第三个位置停止?“字符串中的'\0'是一种查找字符串结尾(字符串的终止字符)的方法。因此,所有为字符串操作设计的函数都使用“\0”来检测字符串的结尾 现在,如果您想要像您所要求的那样实现,您需要自己设计。

是否有任何C库函数可以将
字符
数组(包含一些
'\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我考虑过,但我不认为这些是真正的字符串,它们是已知大小的内存块。