gpt4 book ai didi

c - 在C中添加两个字符串

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

如何将字符串添加到从 scanf 获取的字符串中?

这样做:

char animal[size];
scanf("%s", animal);

然后添加“Is it a animal?”无论输入什么,然后再次将整个事物作为 animal 返回。

例如,如果我为 animal 输入 'duck',它会让动物返回“Is it a duck?”

此外,我是否应该先将 ? 添加到 animal,然后再添加“Is it a”?

最佳答案

这里是一个快速而肮脏的工作示例,说明如何完成此操作。

但是,它不是很安全/万无一失。例如,您可以使用 scanf() 轻松地溢出 animal 缓冲区。此外,如果您在 sprintf() 中更改字符串的格式,您需要确保 str 有足够的空间。

#include <stdio.h>

int main()
{
char animal[20];
char str[29];
animal[19] = 0; /* make sure animal is 0-terminated. Well, scanf() will 0-term it in this case anyway, but this technique is useful in many other cases. */
printf("Name the beast (up to 19 characters): ");
scanf("%s", animal);
sprintf( str, "Is it a %s?", animal );
puts(str);
return 0;
}

这里是一个稍微改进的版本。我们确保我们读取的字符不会超过 animal 缓冲区可以容纳的字符数,为动物名称的最大长度定义一个预处理器宏以便于维护,当用户输入更多字符时捕获这种情况比要求的,去掉终止用户输入的换行符。

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

#define MAX_ANIMAL_NAME_LEN 9

int main()
{
/* 1 char for 0-terminator + 1 to catch when a user enters too
many characters. */
char animal[MAX_ANIMAL_NAME_LEN + 2];
char str[MAX_ANIMAL_NAME_LEN + 11];
printf("Name the beast (up to %d characters): ", MAX_ANIMAL_NAME_LEN);
fgets( animal, MAX_ANIMAL_NAME_LEN + 2, stdin );
{
/* fgets() may include a newline char, so we get rid of it. */
char * nl_ptr = strchr( animal, '\n' );
if (nl_ptr) *nl_ptr = 0;
}
if (strlen(animal) > MAX_ANIMAL_NAME_LEN)
{
fprintf( stderr, "The name you entered is too long, "
"chopping to %d characters.\n", MAX_ANIMAL_NAME_LEN );
animal[MAX_ANIMAL_NAME_LEN] = 0;
}
sprintf( str, "Is it a %s?", animal );
puts(str);

return 0;
}

正如其他用户所指出的,C 中的字符串,作为 C 语言本身,可以很快变得相当棘手。进一步的改进将是你的功课。搜索引擎是您的 friend 。快乐学习!

您可能需要提防的一个危险陷阱是,如果用户键入的内容超过 fgets() 想要接受的内容,仍然需要从 STDIN 读取输入。如果稍后调用 fgets() 或其他输入函数,您将读取那些额外的字符,这可能不是您想要的!请参阅以下帖子:

How to clear input buffer in C?

C: Clearing STDIN

感谢 chux 指出这一点。

关于c - 在C中添加两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34033949/

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