【发布时间】:2019-10-30 05:44:04
【问题描述】:
代码没有问题。我怀疑我们是否可以连接两个数组。我们了解到,一旦声明了数组,我们就无法增加它的大小。但是下面的代码似乎正在这样做。我们可以使用下面的部分向静态创建的数组添加元素吗?
而(S1[i] = S2[j]) { 我++; j++; }
#include<stdio.h>
char* strcatt(char[], char[]);
int main(void) {
char S1[] = "University of Colombo";
char S2[] = "Sri Lanka";
printf("%s\n", strcatt(S1, S2));
return 0;
}
char* strcatt(char S1[], char S2[]) {
int i = 0, j = 0;
while(S1[i]) {
i++;
}
S1[i++] = ' ';
while(S1[i] = S2[j]) {
i++;
j++;
}
return (S1);
}
我得到这个输出:- 斯里兰卡科伦坡大学
【问题讨论】:
-
您应该分配一些新内存,然后将字符复制到其中。
-
@Chamika 代码具有未定义的行为,因为尝试写入数组以外的内存。
-
@JeroenvanLangen 感谢评论。但是我的问题是,一旦声明了一个数组,我们如何扩展它?在第一个数组的空值之后,它使用第二个 while 循环获取另一个数组的元素。在这里,第一个数组已经扩展。
-
@Chamika 如果第一个数组被声明为至少像 char S1[32] = "University of Colombo";也就是说,如果第一个数组有足够的内存来容纳第二个数组的元素
-
C 不会控制你的代码,这取决于你!同样,C 不会检查您是否到达数组的末尾,这是您的责任。所以行为真的是不确定的,你只是在写一个没有分配给你的数组的内存位置。
标签: c arrays string while-loop concatenation