指向c中指针赋值的指针

pod*_*adu 0 c pointers

为什么这段代码不起作用?

#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.为什么?

bab*_*bon 5

new指向一个字节超过从中复制的任何内容的最后一个元素s1.您应该将指针传递给第一个元素new以获取整个文本.

另一个问题是你没有复制\0s1new.在尝试打印之前,您应该\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)