BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #79879同步于 2014/5/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]如何把string类型的数据写到一个char数组里去

NM999
2014/5/23镜像同步13 回复
rt,thx
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
NM999机器人#1 · 2014/5/23
还有一个问题,如果定义一个字符串数组,然后定义一个字符指针p指着字符串的首地址,那么cout《p是出来一个字符还是整个字符串呢,请问
gaoweiwei机器人#2 · 2014/5/23
std::string src; char dest[N]; strcpy_s(dest, N, src.c_str());
gaoweiwei机器人#3 · 2014/5/23
整个字符串。 【 在 NM999 的大作中提到: 】 : 还有一个问题,如果定义一个字符串数组,然后定义一个字符指针p指着字符串的首地址,那么cout《p是出来一个字符还是整个字符串呢,请问
tonyjansan机器人#4 · 2014/5/23
又是M$的“优雅”嘛- -|strncpy伤不起... #define N 10 string src = "abcdefgh"; char dest[N]; memset(dest, 0, N); strncpy(dest, src.c_str(), (N - 1 < src.length())? (N - 1) : src.length()); cout << dest << endl; 【 在 gaoweiwei 的大作中提到: 】 : std::string src; : char dest[N]; : strcpy_s(dest, N, src.c_str());
FromSixToTen机器人#5 · 2014/5/23
还还用问?内存拷贝,或者字符串复制,string s在标准C里面没有,string就是char *。
gaoweiwei机器人#6 · 2014/5/23
漏掉了最后的'\0'。 不考虑可移植性的话,strncpy的效率不高,起码得先获得源字符串的长度 【 在 tonyjansan 的大作中提到: 】 : 又是M$的“优雅”嘛- -|strncpy伤不起... : #define N 10 : string src = "abcdefgh"; : ...................
chenjiyuan机器人#7 · 2014/5/23
第二个问题。。。输出的是字符串,自己试一试就知道了 通过『我邮2.0』发布
shan10211865机器人#8 · 2014/5/23
进来学习
tonyjansan机器人#9 · 2014/5/23
哎~算了~我就不多说啥了,上个源码,对比参考以供学习: // M$ ***cpy_s _FUNC_PROLOGUE errno_t __cdecl _FUNC_NAME(_CHAR *_DEST, size_t _SIZE, const _CHAR *_SRC) { _CHAR *p; size_t available; /* validation section */ _VALIDATE_STRING(_DEST, _SIZE); // 1 _VALIDATE_POINTER_RESET_STRING(_SRC, _DEST, _SIZE); // 2 p = _DEST; available = _SIZE; while ((*p++ = *_SRC++) != 0 && --available > 0) /* 3. copy string */ { } if (available == 0) { _RESET_STRING(_DEST, _SIZE); // 4 _RETURN_BUFFER_TOO_SMALL(_DEST, _SIZE); } _FILL_STRING(_DEST, _SIZE, _SIZE - available + 1); /* 5. pad out with zeroes */ _RETURN_NO_ERROR; } // strncpy char * __cdecl strncpy (char * dest, const char * source, size_t count) { char *start = dest; while (count && (*dest++ = *source++)) /* 3. copy string */ count--; if (count) /* 5. pad out with zeroes */ while (--count) *dest++ = '\0'; return(start); } 【 在 gaoweiwei 的大作中提到: 】 : 漏掉了最后的'\0'。 : 不考虑可移植性的话,strncpy的效率不高,起码得先获得源字符串的长度