为什么这段代码不起作用?
#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;
}
我运行了 gdb,发现 *s1 没有分配给 *new。为什么?
最佳答案
new
指向从 s1
复制的最后一个元素之后的一个字节。您应该将指针传递给 new
的第一个元素以获取整个文本。
另一个问题是您没有将 \0
从 s1
复制到 new
。在尝试打印之前,您应该在 new
的末尾放置一个 \0
。否则你正在调用 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;
}
关于c - c中指向指针赋值的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47524557/