gpt4 book ai didi

c - strcpy() 和字符串左移给出错误的结果

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:44 25 4
gpt4 key购买 nike

在某些项目中,我有一段 C 代码运行错误,但仅限于特定的输入字符串。我只编译这一段:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define slength 1000 // max string length
char ss[slength];
int main(void) {
strcpy(ss, "\"abcdefghijkl\"");
printf("1 %s\n",ss);
if (ss[0]=='"') { // remove quotes
printf("2 %s\n",ss);
strcpy(ss, ss+1); // remove first symbol - quote
printf("3 %s\n",ss);
ss[strlen(ss)-1]='\0'; //last symbol
printf("4 %s\n",ss);
}
printf("5 %s\n",ss);
return EXIT_SUCCESS;
}

结果是

1 "abcdefghijkl"
2 "abcdefghijkl"
3 abcdefhhijkl"
4 abcdefhhijkl
5 abcdefhhijkl

所以我得到的是“abcdefhhijkl”而不是“abcdefghijkl”。我哪里错了?谢谢。

附言我希望我的代码中没有任何多字节/Unicode 字符,但可能需要额外检查。

gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
Linux test-i3 3.13.0-63-generic #104~precise1-Ubuntu SMP Tue Aug 18 17:03:00 UTC 2015 i686 i686 i386 GNU/Linux

最佳答案

来自 strcpy(3) 手册:

   The  strings  may  not overlap, and the destination string dest must be
large enough to receive the copy. Beware of buffer overruns! (See
BUGS.)

你应该使用memmove(3):

    memmove(ss, ss+1, strlen(ss));   // remove first symbol - quote

...而不是...

    strcpy(ss, ss+1);   // remove first symbol - quote

关于c - strcpy() 和字符串左移给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32717244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com