ISO C89 中 strcpy 的替代品
alternatives to strcpy in ISO C89
我必须为电话簿编写一个函数。
我已经将电话簿定义为一个结构数组 "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] = '[=10=]';
/* save it to the array */
for (i = 0;; i++) {
if ((phonebook[count].name[i] = parameter[i]) == '[=10=]') break;
}
/* print the saved parameter for checking */
puts(phonebook[count].name);
return 0;
}
我必须为电话簿编写一个函数。 我已经将电话簿定义为一个结构数组 "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] = '[=10=]';
/* save it to the array */
for (i = 0;; i++) {
if ((phonebook[count].name[i] = parameter[i]) == '[=10=]') break;
}
/* print the saved parameter for checking */
puts(phonebook[count].name);
return 0;
}