将一个字符串复制到另一个没有 \0

Copy a string into another without \0

我不得不把一个字符串放到另一个没有 \0 的字符串中,我尝试了很多方法,但字符串总是脏的。

char string[100];
int pos=0;

fgets(string, 99, stdin);
len = strlen(string);
printf("%d\n", len);
char array[len-1];

for(pos=0; pos<(len-1); pos++)
    {
      array[j]=string[pos];
      j++;
    }

printf("%s", string);
printf("%s", array);

在终端我有: 狗狗(输入) 10(输入) 狗狗(输入) 狗狗@

我也尝试使用另一个符号删除 \0,但它看不到“\0”或“\n”,请帮助我!

TL;DR 你不需要空终止符,很好。除此之外,您应该准备好放弃那些伴随空终止符出现的属性。您不能再将 array 用作 string


详细说明,在您的代码中,您的数组 array 不是以 null 结尾的,因此它不能用作 字符串 %s 格式说明符需要一个指向以 null 结尾的 char 数组的指针(简而言之,一个 字符串

因此,在您的代码中,

printf("%s", array);

通过分配的内存 搜索 空终止符来调用 undefined behavior

但是,您可以使用 for 循环逐个元素地打印它。

在没有指定长度的情况下将指向非空终止字符串的指针传递给 %s 将调用 未定义的行为。如果您出于某种原因讨厌终止空字符,则必须指定要打印的长度。

试试这个:

#include <stdio.h>
#include <string.h>

int main(void) {
  int len;

  char string[100];
  int pos=0;

  fgets(string, 99, stdin);
  len = strlen(string);
  printf("%d\n", len);
  char array[len];

  for(pos=0; pos<len; pos++)
      {
        array[pos]=string[pos];
      }

  printf("%s", string);
  printf("%*s", len, array);

  return 0;
}

要在没有终止 null 的情况下进行复制,请使用 memcpy( myCharArray, string, strlen(string) ); (假设 myCharArray 的大小足够)。要打印出结果,需要使用循环而不是 printf。