将一个字符串复制到另一个没有 \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。
我不得不把一个字符串放到另一个没有 \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。