c - ISO C89 中 strcpy 的替代方案

标签 c arrays string function ansi-c

我必须为电话簿编写一个函数。 我将电话簿定义为结构体“contacts”的数组,每个结构体联系人包含 name[],surname[],number,[]address[] 字符串,这也是函数的参数。 问题是,当我必须将输入的参数保存在电话簿数组的“count”位置(即电话簿[count].name)时 VS 2010 说我不能使用“=”将字符串保存到数组中。 网上有人说我可以使用指针或strcpy,但我的老师不希望我使用它们。 有一些替代方案吗? 我必须使用 ISO C89(ANSI C) 进行编码,并且可以使用 string.h 和 ctype.h 库(我不能使用 strcpy 或 strcat),并且不能使用文件或指针。 无论如何,我不确定 strncpy。

最佳答案

简单的逐个字符分配就可以了。

#include <stdio.h>

#define BUFFER_LENGTH 128

struct contacts {
    char name[BUFFER_LENGTH];
    char surname[BUFFER_LENGTH];
    char number[BUFFER_LENGTH];
    char address[BUFFER_LENGTH];
};

int main(void) {
    struct contacts phonebook[1];
    int count = 0;
    char parameter[BUFFER_LENGTH];
    int i;

    /* enter some parameter */
    for (i = 0; i < BUFFER_LENGTH - 1; i++) {
        int input = getchar();
        if (input == '\n' || input == EOF) break;
        parameter[i] = input;
    }
    parameter[i] = '\0';

    /* save it to the array */
    for (i = 0;; i++) {
        if ((phonebook[count].name[i] = parameter[i]) == '\0') break;
    }

    /* print the saved parameter for checking */
    puts(phonebook[count].name);

    return 0;
}

关于c - ISO C89 中 strcpy 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594311/

相关文章:

c - 当 Ruby 中的 system() 调用时,GCC 无法编译

比较两个 uint8_t 类型变量的内容 A[8] = uint8_t B

python - 集成返回数组的函数的 pythonic 方法是什么(使用 scipy quad)?

c++ - 有没有办法将 std::array 与文字或初始值设定项列表一起用于比较,就像赋值一样?

string - 如何在 Rust 中获得 float 的紧凑但无损的字符串表示?

c - 如何在 "if"比较中使用#define mask

更改顺序修复了我的错误。为什么?

c 数组比较麻烦

javascript - 为什么这会返回一个数字?

c# - 将 C++ 字符串发送到 C# 字符串。互操作性