【发布时间】:2017-04-04 19:10:53
【问题描述】:
长度函数:
int length(const char s[])
{
int length = 0;
while(s[length]!='\0')
{
length++;
}
return length;
}
插入函数:
void insert(char s1[], const char s2[], int n)
{
char *beginOfString = s1;
int lengthOfS1 = length(s1);
int lengthOfS2 = length(s2);
char s1Copy[lengthOfS1 + lengthOfS2];
int c, afterC, lengthOfRemainingPart;
c = 0;
c = n + 1;
beginOfString += c;
afterC = c; //nth position to start from to add onto array
lengthOfRemainingPart = length(beginOfString);
c = 0;
int counter = 0;
for(c = 0; c < length(s1) - 1; c++) {
s1Copy[c] = s2[counter];
for(c = afterC; c < (lengthOfS1 + lengthOfS2) - 1; c++) {
if(c == afterC) {
s1Copy[c] = s2[counter];
} else {
counter++;
if(s2[counter] != *"\0")
s1Copy[c] = s2[counter];
}
}
}
c = 0;
for(c = 0; c < length(s1Copy) - 1; c++) {
printf("\n %c \n", s1Copy[c]);
}
printf("\n");
printf("\n %s \n", beginOfString);
printf("\n %s \n", "LINE");
}
函数调用(及相关声明):
#define MAX_STR 20
char ab[MAX_STR + 1] = "Chicken and Chips";
char b[MAX_STR + 1] = "Scampi";
insert(ab, b, 7);
我正在尝试将一个 char 数组插入另一个 char 数组,同时保持其余字符仍在数组中,但根据用户想要根据 n 值插入 char 数组的位置进行移动。
这似乎不起作用,并且似乎输出了错误的值。函数调用和函数头(参数类型等)需要保持我放置它们的方式。只有函数体本身可以改变。
输出应该是“ChickenScampi and Chips”
任何想法我哪里出错了?干杯。
【问题讨论】:
-
你会粘贴你的代码输出,想看看你得到了什么?
-
一无所获:/
-
如果您尝试插入“Scampi”,问题会更清楚,因为我们不知道哪个双“鸡”是第一个。
-
您使用相同的索引变量嵌套了 for 循环。外循环对我来说似乎没用
-
所以我可以看到的问题是,你没有用 '\0' 终止 s1copy,但你正在调用它的长度。计数很可能超出范围(即 UB)。
标签: c arrays string pointers char