gpt4 book ai didi

将字符数组复制到另一个而不复制换行符

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

我正在使用 fgets 读取 char 数组中的字符串,然后我想将指针移到 5 个索引上并将数组的其余部分复制到一个单独的数组中,但我不希望它复制一个换行符;所以我有这样的东西:

char str1[45], str2[50];
fgets(str2, 50, stdin);
*str2 += 5;
sprintf(str1, "%[^\n]s", str2);

但是当我尝试编译时,我收到一条错误消息:

unknown conversion type character â[â in format [-Wformat]

我很确定我之前在 scanf 中使用过“%[^\n]s”,它工作得很好,有什么建议吗?

最佳答案

模式 %[^n]sscanf 的有效格式,但它不是 printf(或 sprintf).

此外,*str2 += 5 不会跳过前 5 个字符(这似乎是有意的),而是为存储在 str2 的第一个元素中的字节添加 5 str2 = str2 + 5 将无法编译,因为 str2 是一个数组。您可以将结果分配给临时对象或将其直接传递给 sprintf。

这里有一个更好的方法来完成你所要求的:

size_t len;
char *str1 = NULL, str2[50];
fgets(str2, 50, stdin);
len = strlen(str2);
if (len > 5) {
if (str2[len-1] == '\n') {
str2[len-1] = '\0'; // remove newline
len--;
}
str1 = str2 + 5;
len -= 5;
}

if (str1 != NULL) {
// do stuff
}

关于将字符数组复制到另一个而不复制换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26918775/

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