c - c中指向指针赋值的指针

标签 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;
}

我运行了 gdb,发现 *s1 没有分配给 *new。为什么?

最佳答案

new 指向从 s1 复制的最后一个元素之后的一个字节。您应该将指针传递给 new 的第一个元素以获取整个文本。

另一个问题是您没有\0s1 复制到 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/

相关文章:

无法将 PathFindExtensionW 输出分配给 WCHAR 数组

c - 我们将 -1 作为 strncmp() 中第三个参数的值传递,会发生什么。 n 要比较的字节数?

c - 在 C 语言中无限猜谜游戏中记分

c - 结构困难 C

c++ - C++ 中不同类的方法映射

c - 如何在头文件和c文件中声明函数指针?

c - 通过使用一系列指针从结构访问字符串

c++ - bool 后缀表示法

C 套接字 : recv and send all data

c++ - 数组的行为不符合我的预期