C语言 如何从字符数组中删除前80个字符?



我有我的字符数组,它的最大大小是1024。不管怎样,它包含一个200个字符的字符串。我想从这200个字符的字符串中删除前80个字符。我该怎么做呢?

char my_array[1024];
for(int i = 80; i < sizeof(my_array); i+=1)
{
my_array[i-80] = my_array[i];
}

我试过这个,但它不起作用。你知道什么解决办法吗?谢谢大家的帮助!

使用标准C字符串函数memmove。例如

#include <string.h>
//...
memmove( my_array, my_array + 80, strlen( my_array ) - 79 );

幻数79表示您需要复制字符串中除80字符外的所有字符,但包括终止零字符''

您需要保证数组确实包含一个字符串,并且存储的字符串的长度(strlen( my_array ))不少于80

例如

size_t n = strlen( my_array );
if ( !( 80 < n ) )
{
myarray[0] = '';
}
else
{
memmove( my_array, my_array + 80, n - 79 );
}

下面是一个演示程序,从存储在字符数组中的字符串中删除前7个字符。

#include <string.h>
#include <stdio.h>
int main( void ) 
{
char s[] = "Hello World";
size_t n = 6;

puts( s );

memmove( s, s + n, strlen( s ) - n + 1 );

puts( s );
}

程序输出为

Hello World
World

不是改变数组,你可以,根据你的需要,只是创建一个指针指向原始字符串的第81个char,这个指针现在指向一个字符串,其中80个char被删除。下面是一个更短的例子,只删除了10个char

int main(void)
{
char orig[]="This is a long string";
char *s=orig+10;
puts(s);
return 0;
}

打印

long string

字符计数问题:

您说要删除字符。char与字符不同,字符不容易定义,也难以计数。首先,您必须知道编码和CHAR_BIT的值。您很可能会使用UTF-8和CHAR_BIT==8。计算代码点相对容易,只需计算表示代码点开始的chars(第7位为0或设置了第6位)。但是事情变得复杂了。您需要注意组合字符,这些字符是与其他代码点组合以创建单个字符的代码点。这也更加困难,因为根据上下文,角色不能组合。然后你需要定义如何计数。例如,在韩语中,多个简单的"字符";可以组合成单个"字符"。把它们放在一个正方形里,怎么数呢?(免责声明:我不懂韩语,也不太明白韩语是怎么用的。)

计算字符超出了这个答案,我只是想告诉你"删除80个字符";不容易定义