gpt4 book ai didi

c++ - 使用 strcat 将字符附加到 C 中的字符串

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

大家好,我仍然对指针感到困惑,我想知道是否可以在不使用 sprintf 的情况下执行以下操作:

char a[100], b[100], c[2];

//Some code that puts a string into a

for(i = 0; i<strlen(a); i++)
{
if(a[i] == 'C')
strcat(b, "b");
else if(a[i] == 'O')
strcat(b, "a");
else if(a[i] == 'D')
strcat(b, "1");
else
{
sprintf(c, "%s", a[i]);
strcat(b, c);
}
}

几乎是一个 for 循环,遍历一个字符串(一个数组)并根据字符是什么用一个字符(或字符串)填充另一个字符串,如果字符不是 C、O 或 D,它只是添加它到另一个字符串。

  • 我似乎不能只执行 strcat(b, a[i]); 我知道它不会工作,因为它会尝试 strcat(char *, char) 而不是 char*, const char*)
    无论如何我可以把它变成一个指针吗?它们仍然让我很困惑..而且我对一般编程只是对低级语言不熟悉...

  • 初始化 char[] 的最佳方法是什么? 将用字符串填充,我现在使用的是:

    char ie[30] = ""
  • 如果有更简单的方法,也请告诉我

如果不清楚这显然是一个一次性脚本,我想抱歉,但我的脚本中使用了相同的概念。

提前谢谢你 stackoverflow :X

最佳答案

(1)您的代码中可能存在一个错误:

您评论说一些代码将字符串放入 a,我认为您没有将任何字符串分配给 b。所以默认情况下 char b[100]; 有垃圾值(可能不会在 b 中出现 \0)。但是字符串连接函数要求 b 必须是一个字符串。所以

strcat(b, "b");   <--will Undefined Behavior 

(2) 一种初始化空字符串的技巧:

是的,你应该总是用默认值初始化你的变量(数组),比如:

char a[100] = {0}, b[100] = {0}, c[2] = {0};

注意:半初始化数组的剩余元素将为 0(null),初始化一个 variable assume to be good practice

(3)strcat(b, a[i]); 是错误的:

要将 a[i] 中的字符串连接到 b 中,您可以这样做:

strcat(b, a + i);

是的,你是对的 strcat(b, a[i]); 确实无效。

注意:a[i](a + i)是不一样的,a[i]是char类型,其中as (a + i)a 类型的字符串。

假设您有以下字符串数组 a 并且 i 的值为 2 那么:

+----+----+----+---+---+----+----+----+---+
| 'u'| 's' |'e'|'r'|'5'| '6'| '7'|'8' | 0 |
+----+----+----+---+---+----+----+----+---+
201 202 203 204 205 206 207 208 209 210 211
^ ^
| |
a (a+i)

所以在上图中,a 的值是 201,类型是 char [100](假设数组的大小是 100) (a + i) 还指向 'e'address 203 的字符串。其中 a[i] = 'e'

所以你不能做 strcat(b, a[i]); 但是 strcat(b, a + i); 是有效的语法。

此外,从@BenVoigt 到 i 位置的n 个字符,您可以这样做:

strncat(b, a+i, n);

它会将 n 字符从 a+i 附加到 b

关于c++ - 使用 strcat 将字符附加到 C 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15916543/

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