【发布时间】:2016-01-08 06:17:06
【问题描述】:
在 C 编程中尝试将元素添加到动态 char 数组时遇到了一些问题。这是预期的输出:
How many characters do you want to input: 5
Input the string:datas
The string is: datas
Do you want to 1-insert or 2-remove or 3-quit?: 1
What is the character you want to insert: a
Resulting string: adata
我已经在 main 函数中完成了那些用户输入部分,这是 main 中的代码,我在其中接收字符串输入、大小并将它们传递给 insert():
printf("How many characters do you want to input: ");
scanf("%d", &n);
str = malloc(n + 1);
printf("Input the string class: ");
scanf("%s", str);
case '1':
printf("What is the character you want to insert: ");
scanf(" %c", &input);
insert(str, input, n);
break;
还有我的插入()的部分:
void insert(char *str, char input, int n) {
int i;
size_t space = 1;
for (i = 0; i < n; i++) {
str[i] = (char)(input + i);
space++;
str = realloc(str, space);
if (i > 2) {
break;
}
}
for (i = 0; i < n; i++) {
printf("%c", str[i]);
}
}
但是,当我尝试从 insert() 中打印出字符串时,假设我输入 'a' 以附加到大小为 5 的动态数组的第一个元素,我得到的结果是 abcd=
我引用了stackoverflow thread,但我不确定如何解决这个问题。提前致谢。
【问题讨论】:
-
为什么人们不检查
scanf的返回值? -
抱歉,您的意思是检查作为参数从 main 传递到 insert() 的输入吗?我检查了它,它是正确的。例如,当我输入“b”时,输出变为 bcde=。那么我们说q,outout变成了qrst= etc etc
-
函数
scanf返回一个值——它有多成功。这应该被检查以确保相关变量已被“填充”。人们会打错字,也许会给他们重新输入数据的机会 -
(请阅读
scanf- linux.die.net/man/3/scanf的手册页 -
为什么你不断地将
input+i存储到str缓冲区中?既然input是a,那么你当然会得到b(a+1)、c(a+2) 等等。为什么不断地realloc?您确切地知道最终字符串需要多长时间。只需malloc一次即可完成。