为什么这段代码不起作用?
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char **argv){
char * new;
new = malloc(10);
const char * s1 = "hello";
while(*s1){
*new++ = *s1++;
}
printf("%s",new);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我运行了gdb,发现*s1没有分配给*new.为什么?
new指向一个字节超过从中复制的任何内容的最后一个元素s1.您应该将指针传递给第一个元素new以获取整个文本.
另一个问题是你没有复制\0从s1到new.在尝试打印之前,您应该\0在最后放置一个new.否则你正在调用UB.
你可能会这样做并检查:
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char **argv){
char * new, *new2;
new = malloc(10);
new2 = new;
const char * s1 = "hello";
while(*s1){
printf("%c\n", *s1); // the \0 is *not* appended
*new++ = *s1++;
}
*new = '\0';
printf("%s\n",new2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)