标签: cstring

4
推荐指数
1
解决办法
2957
查看次数

在g ++编译器中使用strlen获取数组的长度

有人可以解释为什么我在使用以下g ++编译器编译源代码时出现此错误

#include <cstdio>
#include <string>

using namespace std;

int main()
{
    char source_language[50];


    scanf("%16s\n",source_language);

    int length = sizeof(source_language);
    int sizeofchar = strlen(source_language);
    printf("%d\n",sizeofchar);
}
Run Code Online (Sandbox Code Playgroud)

这给了我以下错误

test.cpp:在函数'int main()'中:

test.cpp:31:错误:在此范围内未声明'strlen'

当我改变#include <string>#include <string.h>#include<cstring>,它工作正常,我需要弄清楚使用#include<string>和有什么区别#include<string.h>.非常感谢任何帮助

c++ string cstring strlen

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

char*作为C中函数的参数

将char*作为参数传递给函数时,被调用函数是否应该对该字符串执行free?否则,数据将"丢失",程序将泄漏数据.或者编译器以特殊方式处理char*以避免每个人不得不一直处于空闲状态并自动删除它超出范围?我将"字符串"传递给函数,因此不将实例传递给已存在的char*.或者应该使用char []代替?只是觉得为参数输入设置一个固定的限制是如此愚蠢.

c cstring

4
推荐指数
3
解决办法
520
查看次数

C++删除c-strings数组/其他类型的数组

[编辑]

好的,这是有道理的,谢谢sharptooth和CashCow.您不能删除分配为const的数据,这会使字符串文字无法解决.所以,如果我将初始化更改为如下所示:

char **groups = new char*[2];

char *s1 = new char[10];
char *s2 = new char[10];
char c1 = 'a';
char c2 = 'b';
for(int i = 0; i < 9; i++)
{
    s1[i] = c1;
    s2[i] = c2;
}
s1[9] = NULL;
s2[9] = NULL;

groups[0] = s1;
groups[1] = s2;
Run Code Online (Sandbox Code Playgroud)

硬代码我的for循环使它只迭代i = 1和i = 2,然后一切正常.

我注意到,int arraySize = sizeof arr / sizeof *arr;当数组分配new []而不是local时,似乎只能工作.这是因为我的原始char ** groups;变量衰减到指针,对吧?

现在我想知道,无论如何判断数据是否为常量?


[原版的]

我知道数组和指针是邪恶的,并且有一些称为向量和链表的伟大事物.

但是,在内存管理方面,我是一个新手,我感觉有点自虐.假设我创建一个C字符串数组.我知道,从这个问题 …

c++ memory-management cstring new-operator

4
推荐指数
1
解决办法
5681
查看次数

C++/CLI将CString的内容打印到控制台

这里的C++新手有一个简单的问题.如何将CString的内容打印到控制台?

这样做

int main(array<System::String ^> ^args)
{               
    CString cs1 = _T("Hy");
    CString cs2 = _T(" u");
    CString cs3 = cs1 + cs2;

    Console::WriteLine(cs3);    
    printf("%s", cs3);  
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在控制台上输出"True"和"H".TIA.

c++-cli cstring

4
推荐指数
1
解决办法
6722
查看次数

嵌套的C数组指针类型

这似乎是一个本来应该已经回答的问题,但我似乎找不到令人满意的东西.无论如何,我需要从一个看起来像这样的函数返回:

{ {"foo", "bar"}, {"baz", "foo"}, {"foo", "bar"} }
Run Code Online (Sandbox Code Playgroud)

我熟悉它的用法,argv我理解它的类型意味着什么,但由于某种原因,我无法得到上述表达式的类型正确.在最里面的部分总会有2个字符串文字,因此我想到的是其中之一

char **s[2] or char *(*s[2])
Run Code Online (Sandbox Code Playgroud)

应该是我所追求的,但由于某种原因,无论我尝试迭代和使用时的尝试,我总是会遇到段错误printf.此外,编译器经常抱怨不兼容的指针类型,多余的元素和太多的大括号.这是当前的代码:

 char *(*s[2]) = { {"foo", "bar"}, {"baz", "spam"}, {"eggs", "ham"} };
Run Code Online (Sandbox Code Playgroud)

c pointers cstring

4
推荐指数
1
解决办法
136
查看次数

无法将CStringW转换为CStringA

我工作的一个项目,我已经在转换的一个问题stucked CStringWCStringA像日语多字节字符串.

我正在使用LoadString()Method 从字符串资源加载字符串.我尝试过以下代码,但似乎没有用.

CStringW csTest;
csTest.LoadString(JAPANESE_STRING);
CStringA Msg = CStringA(csTest); // Msg has been returned blank string
Run Code Online (Sandbox Code Playgroud)

std::string Msg = CW2A(csTest);// Msg has been returned blank string
Run Code Online (Sandbox Code Playgroud)

我也试过 wcstombs()了.

任何人都可以告诉我如何转换CStringWCString?提前致谢.

c++ string mfc cstring mbcs

4
推荐指数
1
解决办法
5493
查看次数

CString + =运算符性能问题

我正在研究一个较旧的MFC/C++项目,该项目使用MFC的CString类来解析大型文本文件以处理字符串.我注意到在解析过程中有很多小部件添加到整个大型CString对象中:

//'strContainer' = CString
//'tag' = CString of a much smaller size
strContainer += L"<" + tag + L">";
Run Code Online (Sandbox Code Playgroud)

strContainer变量达到一定的较大尺寸时,上面的运算符似乎会降低CString的整体性能.我想这种情况会发生,因为+=操作员经常重新分配内存.

所以我很好奇,有没有办法改善这个?

PS1.我不知道预先分配结果字符串的大小.

PS2.由于项目本身的复杂性,我必须坚持使用CString.(或者,我无法切换到Boost或其他更新的实现.)

c++ performance mfc cstring

4
推荐指数
1
解决办法
1615
查看次数

CString :: Format()可以接收const std :: string吗?

可以的CString ::格式()接受常量的std :: string?

例:

void some_func( const std::string a_string )
{
    CString b_string("World");

    CString c_string;
    c_string.Format("%s %s!", a_string, b_string);

    /* print c_string */
};
Run Code Online (Sandbox Code Playgroud)

c++ const cstring

3
推荐指数
1
解决办法
2207
查看次数

C++:如何将ASCII或ANSI转换为UTF8并存储在std :: string中

我公司使用这样的代码:

    std::string(CT2CA(some_CString)).c_str()
Run Code Online (Sandbox Code Playgroud)

我认为它将Unicode字符串(其类型为CString)转换为ANSI编码,此字符串用于电子邮件的主题.但是,电子邮件的标题(包括主题)表示邮件客户端应将其解码为unicode(这是原始代码的作用).因此,一些像"äöü"这样的德国字母将无法正确显示为标题.

无论如何,我可以将此标头放回UTF8并存储到std :: string或const char*?

我知道有很多更聪明的方法可以做到这一点,但我需要保持代码坚持原来的(即将头部发送为std :: string或const char*).

提前致谢.

c++ cstring stdstring visual-studio-2010

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