gpt4 book ai didi

c - 字符串复制例程在 C 中不起作用

转载 作者:行者123 更新时间:2023-11-30 20:04:18 25 4
gpt4 key购买 nike

我尝试使用下面的代码在 C 中复制字符串,但没有得到正确的结果。

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

int main(void){
char *string1;
char *string2 = "abcdefghijk";
char *ptr = string2;
unsigned int no_of_chars =0;

while(*ptr++ !='\0'){
no_of_chars++;
}

string1 = malloc(sizeof(char)*(no_of_chars+1));
while(*string1++ = *string2++);
printf("string2=%s\n",string2);
printf("string1=%s\n",string1);

return 0;
}

我使用 MinGW 编译器得到以下结果:

string2=string2=%s

string1=ï‼

编辑:好的,更改了代码,下面的代码可以工作。

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

int main(void){
char *string1;
char *string2 = "abcdefghijk";
char *ptr = string2, *ptrsrc = string2;
unsigned int no_of_chars = 0;

while(*ptr++ !='\0'){
no_of_chars++;
}

char *ptrdst = string1 = malloc(sizeof(char)*(no_of_chars+1));

while(*ptrdst++ = *ptrsrc++);

printf("string2=%s\n",string2);
printf("string1=%s\n",string1);

return 0;
}

最佳答案

运行 while(*string1++ = *string2++); 后,string1 指向第一个字符串的末尾,string2 指向第二个字符串的末尾。

也就是说,它们都指向各自空终止符之后的下一个字节,因此 printf 看到两个垃圾字符串(可能是空白)。

您可以使用不同的变量来保存字符串中的起始位置和当前位置,例如:

char *pstr1 = string1;
char *pstr2 = string2;
while(*pstr1++ = *pstr2++);

现在,pstr1pstr2 指向超出其字符串末尾的一个字符,但 string1string2仍然指向开始。

关于c - 字符串复制例程在 C 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41946788/

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