c++ std:string append char 的奇怪问题

寒山孤舟 2015-02-08 03:08:39
一个应该比较简单的问题,但我一直没有搞明白


int a=97, z=122;
vector<std::string> imageVector;
for (int i=a; i<=z; i++) {
char c = (char)i;
std::string imageName = "26char/";
imageName.append(&c);
imageName.append(".png");
imageVector.push_back(imageName);
}


以上代码我期望值为
26char/a.png
26char/b.png
.
.
.
以此类推,但运行结果却很奇怪,
结果为
26char/aa.png
26char/bb.png
.
.

为什么一个变成两个,
将代码换成这样才得到正确的值

mageName.append(&c, 1);



...全文
862 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
寒山孤舟 2015-02-11
  • 打赏
  • 举报
回复
感谢各位,原因是使用append(&c)的时候要求这以空结尾 basic_string& append( const CharT* s ); 追加空字符结尾的字符串所指向的s 本人c++初学 见笑
东莞某某某 2015-02-10
  • 打赏
  • 举报
回复
const int a=97, z=122;
    vector<string> imageVector;
    const string fileHead = "26char/";
    const string fileSuffix = ".png";

    string imageName(fileHead+"a"+fileSuffix);
    for (int i=a; i<=z; i++) {
        imageName[fileHead.length()] = static_cast<char>(i);
        imageVector.push_back( imageName );
    }

    for(auto el:imageVector)
        cout << el << endl;
夜想曲 2015-02-10
  • 打赏
  • 举报
回复
这个样子: string (1) string& append (const string& str); substring (2) string& append (const string& str, size_t subpos, size_t sublen); c-string (3) string& append (const char* s); buffer (4) string& append (const char* s, size_t n); fill (5) string& append (size_t n, char c); range (6) template <class InputIterator> string& append (InputIterator first, InputIterator last); initializer list(7) string& append (initializer_list<char> il); (3) c-string Appends a copy of the string formed by the null-terminated character sequence (C-string) pointed by s. http://www.cplusplus.com/reference/string/string/append/ 就是你一个char结尾是没有null-terminated \0的,所以你append出来的结果应该是未知的,我在我这VS2010试了就变乱码了,可以进那个连接看append的几个重载形式,或者使用楼上几位的
u010617650 2015-02-10
  • 打赏
  • 举报
回复
引用 1 楼 mymtom 的回复:
imageName.append(&c); ===> imageName.append(1, c);
这真是极棒的
greex 2015-02-09
  • 打赏
  • 举报
回复
int a=97, z=122; vector<std::string> imageVector; for (int i=a; i<=z; i++) { char c = (char)i; std::string imageName = "26char/"; imageName+=c; imageName.append(".png"); imageVector.push_back(imageName); }
fly_dragon_fly 2015-02-09
  • 打赏
  • 举报
回复
append( size_type count, CharT ch ), 参数传递错误了, 不过建议这样用,不然放弃了c++的优点了

for (ch i='a'; i<='z'; i++) {
        std::string imageName = "26char/";
        imageName +=i;        
        imageName +=".png";
        imageVector.push_back(imageName);
//也可以一句
       imageVector.push_back((string)"26char/" + i + ".jpg");
    }
mymtom 2015-02-08
  • 打赏
  • 举报
回复
mymtom 2015-02-08
  • 打赏
  • 举报
回复
imageName.append(&c); ===> imageName.append(1, c);

65,204

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧