gpt4 book ai didi

c - 将第二个字符串放在第一个字符串上用户输入的位置

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:41 26 4
gpt4 key购买 nike

我正在开始学习 C,如果对我的家庭作业有任何帮助,我将不胜感激。我需要制作一个函数,该函数从用户输入中获取 2 个字符串和一个位置。第二根弦必须在第一根弦的位置上。例如:

  • 字符串 1:巧克力
  • 字符串 2:蛋糕
  • 位置:3
  • 结果:ChoCakecolate

我需要让它与 VisualStudio 一起工作,这就是“_s”的原因。调试器说我在“strcat”和“strcpy”行上“没有足够的信息”。

这是我无法运行的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void concStrings(char string1[], char string2[], int pos);

int main(void) {
char lastName[20] = { '\0' };
char firstName[20] = { '\0' };
int pos = 0;
scanf_s("%s", &firstName, 20);
scanf_s("%s", &lastName, 20);
scanf_s("%d", &pos);
concStrings(firstName, lastName, pos);
printf("%s\n", firstName);
return 0;
}
// Here is my funcion
void concStrings(char string1[], char string2[], int pos){
char tmp[40];
strcpy_s(tmp, string1, pos);
strcat_s(tmp, string2);
strcat_s(tmp, &string1[pos]);
strcpy_s(string1, tmp);
}

最佳答案

对于初学者来说,这些调用中的第二个参数

scanf_s("%s", &firstName, 20);
scanf_s("%s", &lastName, 20);

指定不正确。应指定为

scanf_s("%s", firstName, 20);
scanf_s("%s", lastName, 20);

因为第二个函数参数的类型是char *并且用作参数的数组名称已经隐式转换为指向其第一个元素的指针。

注意标题<stdlib.h>在你的程序中是多余的。 header 中的声明均未使用。

不需要定义辅助数组,也不需要使用像 40 这样的魔数(Magic Number)来执行任务。

函数本身应该像大多数 C 字符串函数一样具有返回类型 char *。该函数也不应检查第一个字符数组中是否有足够的空间来容纳存储在第二个字符数组中的字符串。应该保证这一点的是函数的客户端。

此外,如果指定的位置大于第一个字符串的长度,那么在这种情况下函数应该做一些事情。一种合乎逻辑的方法是将第二个字符串附加到第一个字符串。

这是一个演示程序,展示了如何定义函数。

#include <stdio.h>
#include <string.h>

char * concStrings( char *s1, const char *s2, size_t pos )
{
size_t n1 = strlen( s1 );

if ( !( pos < n1 ) )
{
strcat( s1, s2 );
}
else
{
size_t n2 = strlen( s2 );
memmove( s1 + pos + n2, s1 + pos, n1 - pos + 1 );
memcpy( s1 + pos, s2, n2 );
}

return s1;
}

int main(void)
{
enum { N = 20 };
char s1[N] = "Chocolate";
char s2[] = "Cake";
size_t pos = 3;

if ( strlen( s1 ) + strlen( s2 ) < N )
{
puts( concStrings( s1, s2, pos ) );
}
else
{
puts( "Unable to include one string in another: not enough space>" );
}

return 0;
}

它的输出是

ChoCakecolate

关于c - 将第二个字符串放在第一个字符串上用户输入的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57130426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com