标签: c-strings

为什么在c ++中使用c字符串?

现在有没有什么好的理由在C++中使用C-strings?我的教科书在某些方面的例子中使用它们,我觉得使用std :: string会更容易.

c c++ string stl c-strings

18
推荐指数
3
解决办法
6934
查看次数

将c样式字符串转换为c ++样式字符串

谁能告诉我如何在C++程序中将C样式字符串(即char*)转换为c ++样式字符串(即std :: string)?

非常感谢.

c++ c-strings

17
推荐指数
2
解决办法
4万
查看次数

在我的情况下strncpy或strlcpy

我应该怎么用,当我要复制src_strdst_arr,为什么?

char dst_arr[10];
char *src_str = "hello";
Run Code Online (Sandbox Code Playgroud)

PS:我的头正在读的东西很多关于如何纺纱后比我的电脑硬盘快strncpystrlcpy.

注意:我知道strlcpy无处不在.这不是问题所在.

c copy c-strings strncpy

17
推荐指数
2
解决办法
3万
查看次数

无法从成员变量中的initializer-string中推断出数组大小的原因是什么?

考虑一下代码:

struct Foo
{
    const char str[] = "test";
};

int main()
{
    Foo foo;
}
Run Code Online (Sandbox Code Playgroud)

它无法使用g ++和clang ++编译,基本上吐出来

error: array bound cannot be deduced from an in-class initializer

我明白这是标准可能会说的,但有什么特别好的理由吗?由于我们有一个字符串文字,似乎编译器应该能够毫无问题地推断出大小,类似于简单地声明一个类外const的类似C的空终止字符串的情况.

c++ c-strings in-class-initialization c++11

17
推荐指数
2
解决办法
3903
查看次数

将Qt默认编码设置为UTF-8

在我的Qt应用程序中,我的源代码文件被编码为UTF-8.对于以下代码......

QMessageBox::critical(this, "Nepoznata pogreška", "Dogodila se nepoznata pogreška! Želite li zatvoriti ovaj program ?", QMessageBox::Yes, QMessageBox::No);
Run Code Online (Sandbox Code Playgroud)

...当我显示该消息框时,字符"š"不会显示为"š",而是显示为奇怪的东西.这是因为Qt将所有C字符串转换为使用LATIN-1编码.为了解决这个问题,我一直在使用:

QMessageBox::critical(this, QString::fromUtf8("Nepoznata pogreška"), QString::fromUtf8("Dogodila se nepoznata pogreška! Želite li zatvoriti ovaj program ?"), QMessageBox::Yes, QMessageBox::No);
Run Code Online (Sandbox Code Playgroud)

有没有办法摆脱所有的电话QString::fromUtf8()

qt c-strings utf-8 character-encoding

16
推荐指数
1
解决办法
2万
查看次数

是strtol,strtod不安全吗?

似乎strtol()并且strtod()有效地允许(并强制)你在字符串中抛弃constness:

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

int main() {
  const char *foo = "Hello, world!";
  char *bar;
  strtol(foo, &bar, 10); // or strtod(foo, &bar);
  printf("%d\n", foo == bar); // prints "1"! they're equal
  *bar = 'X'; // segmentation fault
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面,我自己没有演出.然而,strtol()基本上把我const char *变成了一个char *对我来说,没有任何警告或任何东西.(事实上,它不会让你输入barconst char *,所以迫使类型的不安全的变化.)是不是真的很危险?

c const const-char std c-strings

15
推荐指数
2
解决办法
4886
查看次数

如何声明constexpr C字符串?

我想我非常理解如何将关键字constexpr用于简单的变量类型,但是当涉及到指向值的指针时,我感到很困惑.

我想声明一个constexpr C字符串文字,它的行为就像

#define my_str "hello"
Run Code Online (Sandbox Code Playgroud)

这意味着编译器将C字符串文字插入到我输入此符号的每个位置,并且我将能够在编译时使用sizeof获取其长度.

是吗 constexpr char * const my_str = "hello";

要么 const char * constexpr my_str = "hello";

要么 constexpr char my_str [] = "hello";

还是还有别的什么?

c++ c-strings string-literals constexpr

15
推荐指数
2
解决办法
8202
查看次数

如果我在GetBuffer之后没有调用ReleaseBuffer怎么办?

CString到char*,ReleaseBuffer()必须在之后使用GetBuffer().但为什么?如果我不使用ReleaseBuffer()后会发生什么GetBuffer()

有人能告诉我一个例子吗?谢谢.

c++ mfc c-strings getbuffer

14
推荐指数
1
解决办法
8117
查看次数

在C中打印字符串的一部分

有没有办法只打印部分字符串?

例如,如果我有

char *str = "hello there";
Run Code Online (Sandbox Code Playgroud)

有没有办法只打印"hello",请记住我要打印的子字符串是可变长度,而不是总是5个字符?

我知道我可以使用一个for循环,putchar或者我可以复制数组,然后添加一个空终止符,但我想知道是否有更优雅的方式?

c c-strings

13
推荐指数
2
解决办法
3万
查看次数

如何编写更好的strlen函数?

我正在阅读"写大代码卷2",它显示了以下strlen inslementation:

int myStrlen( char *s )
{
    char *start;
    start = s;
    while( *s != 0 )
    {
        ++s;
    }
    return s - start;
}
Run Code Online (Sandbox Code Playgroud)

该书说,这种实现对于没有经验的C程序员来说是典型的.在过去的11年里,我一直在使用C语言进行编码,我无法在C中看到如何编写比这更好的函数(我可以想到在汇编中编写更好的东西).如何在C中编写比这更好的代码?我看了glibc中strlen函数的标准库实现,我无法理解它的大部分内容.在哪里可以找到有关如何编写高度优化代码的更好信息?

c string optimization pointers c-strings

12
推荐指数
1
解决办法
1万
查看次数