关于C字符串的问题

Nav*_*K N 6 c string

我是C的新手,我对C字符串非常困惑.以下是我的问题.

从字符串中查找最后一个字符

如何找出字符串中的最后一个字符?我带来了类似的东西,

char *str = "hello";
printf("%c", str[strlen(str) - 1]);
return 0;
Run Code Online (Sandbox Code Playgroud)

这是要走的路吗?我不知何故认为,这不是正确的方法,因为strlen必须迭代字符才能获得长度.所以这个操作会有一个O(n)复杂性.

转换charchar*

我有一个字符串,需要附加一个字符.我怎样才能做到这一点?strcat只接受char*.我试过以下,

char delimiter = ',';
char text[6];
strcpy(text, "hello");
strcat(text, delimiter);
Run Code Online (Sandbox Code Playgroud)

运用 strcat具有局部范围的变量

请考虑以下代码,

void foo(char *output)
{
   char *delimiter = ',';
   strcpy(output, "hello");
   strcat(output, delimiter);
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,delimiter是一个在foo返回后被销毁的局部变量.可以将它附加到变量上output吗?

怎么样 strcat处理null终止字符?

如果我连接两个空终止字符串,将会 strcat两个空终止字符附加到结果字符串?

是否有一篇很好的初学者水平文章解释了字符串如何在C中工作以及如何执行常用的字符串操作?

任何帮助都会很棒!

R..*_*R.. 7

  1. 最后一个字符:你的方法是正确的.如果您需要在大字符串上执行此操作,则包含字符串的数据结构应与它们存储长度.如果不是,那就是O(n)并不重要.

  2. 附加一个字符:你有几个错误.首先,你的缓冲区太小而无法容纳另一个角色.至于如何调用strcat,你可以将字符放在一个字符串中(一个包含2个条目的数组,第二个为0),或者你可以手动使用长度将字符写入结尾.

  3. 您对2个终止符的担心是没有根据的.虽然它占用与字符串连续的内存并且是必要的,但是在长度意义上,结尾处的nul字节不是"字符串的一部分"等等.它纯粹是结束的标记.strcat将覆盖旧的nul并在连接字符串之后在最后添加一个新的nul.同样,在调用strcat之前,需要确保缓冲区足够大!


Mat*_*hen 5

  1. 由于C字符串的工作方式,O(n)是你能做的最好的事情.
  2. char delimiter[] = ",";.这使得分隔符包含一个逗号和NUL的字符数组.此外,文本需要长度为7. hello为5,然后你有逗号和NUL.
  3. 如果你正确定义分隔符,那很好(因为你将一个字符分配给指针,这是错误的).输出的内容以后不依赖于分隔符.
  4. 它会覆盖第一个NUL.

你走在正确的轨道上.我强烈建议你阅读K&R C第二版.它将帮助您使用字符串,指针等.不要忘记手册页和文档.他们会strcat非常清楚地回答类似的问题.两个不错的网站是The Open Group和cplusplus.com.