c - 为什么我的字符串值会被覆盖?

标签 c

我正在尝试从用户那里接受一些值并将它们存储在一个字符指针数组中,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    char *names[3];
    char name[20];
    int i;
    for(i = 0; i < 3; i++) {
        printf("Enter your name\n");
        scanf("%s", name);
        names[i] = (char *)malloc(strlen(name));
        names[i] = &name;
        // strcpy(names[i], name);
    }
    printf("Printing the names\n");
    for(i = 0; i < 3; i++) {
        printf("%s\n", names[i]);
    }
}

但是,对于以下输入,我得到以下输出

输入: 马克·德鲁·安德鲁

输出: 安德鲁安德鲁安德鲁

为什么会这样?当我使用我已经注释掉的 strcpy 函数时,它似乎工作正常。

最佳答案

names[i] = &name;正在分配 names 的每个元素到相同的字符缓冲区,因此只有 name 中内容的最终版本将保留在输出中。

您需要使用 strcpy (更好的是,strncpy)复制 name内容names[i] .

别忘了调用 freenames 的每个元素上完成后。

关于c - 为什么我的字符串值会被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48378100/

相关文章:

OS X 中使用 openmp 的 Python 扩展

c - 函数的可变参数中是否需要 va_start?

c++ - 检查线程是否完成的正确方法?

c - 如何通过 if 循环指向一个数组

c - 错误: 'else' without a previous if

c - 在 C 中读取没有 maxsize 的用户输入

c中的子进程信号处理

c - 查找字符串中某个字符的第一个索引

java - 为 x 和 y 设计一个循环内的公式来满足这些要求

c - 编译文件(汇编文件)中的头文件信息在哪里?