我有一个作业要编写一个函数,该函数接受两个 C 字符串参数并将第二个参数附加到第一个参数,就像 strcat 函数一样,但不使用所述函数。然后,编写一个主驱动程序,提示用户输入两个字符串,调用 myStrcat 函数将空格连接到第一个字符串的末尾,然后再次调用 myStrcat 将第二个字符串连接到第一个字符串的末尾。我可以使用 strlen 函数,但这是库中唯一的函数。我写了下面的内容,显然它只调用该函数一次并且不添加空格。我一生都无法理解如何在其中强制插入一个空格...提前致谢,我真的一直在努力解决这个问题...
#include <iostream>
#include <cstring>
using namespace std;
void myStrcat(char s1[], char s2[]);
int main(){
char s1[100];
char s2[100];
cout << "Enter first string: ";
cin.getline(s1, 100);
myStrcat(s1, s2);
cout << "Enter second string: ";
cin.getline(s2, 100);
myStrcat(s1, s2);
cout << s1 << endl;
return 0;
}
//Parameters:
// string1: first string (user input)
// string2: second string (user input)
//Pre conditions:
//Post conditions: The first actual parameter is altered
//Returns: Both srings combined into one; string1 + string2
void myStrcat(char s1[], char s2[])
{
int i, j;
for (i=0; s1[i] != '\0'; ++i);
for (j=0; s2[j] != '\0'; ++j, ++i){
s1[i] = s2[j];
}
s1[i] = '\0';
}
为了安全,
void myStrcat(char s1[], size_t s1Size, char s2[])
然后检查缓冲区 s1 没有溢出。
void myStrcat(char s1[], size_t s1Size, const char s2[])
{
size_t i = 0, j = 0;
// Move 'i' to the end of s1
while (i < s1Size - 1 && s1[i] != '\0') {
i++;
}
// Copy characters from s2 to the end of s1
// without exceeding s1Size - 1
while (i < s1Size - 1 && s2[j] != '\0') {
s1[i++] = s2[j++];
}
// Null-terminate the result
s1[i] = '\0';
}