我尝试使用下面的代码在 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++);
现在,pstr1
和 pstr2
指向超出其字符串末尾的一个字符,但 string1
和 string2
仍然指向开始。
关于c - 字符串复制例程在 C 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41946788/