嘿大家,谢谢你花时间解决我的问题.在这一点上我看了很多材料,我刚开始变得越来越困惑.基本上,我正在编写一个解析字符串的简单代码段.请理解我的问题不是解析.我使用的是C++,之前从未使用过C语言并拥有一点c ++经验(入门经验,我还是新手).
Run Code Online (Sandbox Code Playgroud)struct parsedString{ char chunk1[50]; char chunk2[10]; char chunk3[50]; }; main(char* bigstring) { parsedString ps; ps = parseMe(bigString) cout << ps.chunk1 << endl; cout << ps.chunk2 << endl; cout << ps.chunk3 << endl; } parsedString parseMe(char* stringToParse) { char* parseStr = stringToParse; parsedString ps; ps.chunk1 = first x chars; ps.chunk2 = next y chars; ps.chunk3 = last z chars; return ps; }
显然这不是工作代码,我不想抛弃所有额外的东西,因为它会更难阅读,我很确定我的问题是新手c/c ++问题和内存分配或类似的事情那...
基本上,当main函数从parsedString打印字符串时,它会打印出我想要的字符串,以及垃圾字符.我正在输入每个数组ps.chunk的值
ps.chunk1 [i] =*parseStr
因为parseStr会给我每个角色.我无法弄清楚垃圾字符的来源,是否与我访问大字符串有关?最初我在结构中使用了char而不是数组,当我从parseMe()函数中打印出来时,它们会很棒,但是当我从main函数访问它时它们会变成乱码.感谢任何帮助,非常感谢.
如果有什么不清楚的地方请告诉我,我会尽力详细说明.
'\0'当C++有一个完全可用的字符串类时,不清楚你为什么要用终止字符串来做这个,但是假设一些教学原因:你的字符串是否被'\0'
终止?如何将第一个x字符提取并复制到ps.chunk1中?你如何确保它有一个'\0'?
如果你真的想要获得n个字符,你必须:
assert(strlen(parseStr) >= n);
Run Code Online (Sandbox Code Playgroud)
,将它们复制到目标中(必须包含至少n + 1个字符),
memcpy(ps.chunk1, parseStr, n);
Run Code Online (Sandbox Code Playgroud)
,并添加最终'\0':
ps.chunk1[n] = '\0';
Run Code Online (Sandbox Code Playgroud)
(而且,当然,提前parseStr:parseStr += n;)
或者您可以在任何地方使用std :: string,并编写如下内容:
ps.chunk1(stringToParse.substr(startPosition, length));
Run Code Online (Sandbox Code Playgroud)