cout 打印字符串或者数组出现乱码

chihujun 2011-07-18 03:36:43
random1=(char*)malloc(11);
memset(random1,'a',10);
cout<<random1<<endl;
...全文
919 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
brk1985 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhao4zhong1 的回复:]
引用 4 楼 c_losed 的回复:
C/C++ code

char *random1=(char*)malloc(11);
memset(random1,'a',10);
random1[11] = '\0';
cout<<random1<<endl;


结束符的问题

“多一少一”问题占程序员常犯错误的10%以上!

C/C++ code
char *rand……
[/Quote]

正解。。。
至善者善之敌 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhao4zhong1 的回复:]
引用 4 楼 c_losed 的回复:
C/C++ code

char *random1=(char*)malloc(11);
memset(random1,'a',10);
random1[11] = '\0';
cout<<random1<<endl;


结束符的问题

“多一少一”问题占程序员常犯错误的10%以上!
C/C++ code
char *random……
[/Quote]

+++1
数组初始化是从0开始的,是比较容易搞错
辰岡墨竹 2011-07-18
  • 打赏
  • 举报
回复
malloc分配的内存后立即memset全部清零是好习惯,不要试图依赖操作系统的标准未定义功能。
赵4老师 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 c_losed 的回复:]
C/C++ code

char *random1=(char*)malloc(11);
memset(random1,'a',10);
random1[11] = '\0';
cout<<random1<<endl;


结束符的问题
[/Quote]
“多一少一”问题占程序员常犯错误的10%以上!
char *random1=(char*)malloc(11);
memset(random1,'a',10);
random1[10] = '\0';
cout<<random1<<endl;


hdxu8511 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 c_losed 的回复:]
C/C++ code


char *random1=(char*)malloc(11);
memset(random1,'a',10);
random1[11] = '\0';
cout<<random1<<endl;


结束符的问题
[/Quote]


正解。。。
Vegertar 2011-07-18
  • 打赏
  • 举报
回复
4楼溢出了。
Vegertar 2011-07-18
  • 打赏
  • 举报
回复
用calloc,这样才会在返回前将内存区赋0
c_losed 2011-07-18
  • 打赏
  • 举报
回复

char *random1=(char*)malloc(11);
memset(random1,'a',10);
random1[11] = '\0';
cout<<random1<<endl;

结束符的问题
熊国明 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiongguoming 的回复:]
引用 1 楼 xiongguoming 的回复:
C/C++ code

random1=(char*)malloc(11);
memset(random1,0,10);
memset(random1,'a',10);
cout<<random1<<endl;

[/Quote]++
不好意思打快了
熊国明 2011-07-18
  • 打赏
  • 举报
回复

[Quote=引用 1 楼 xiongguoming 的回复:]
C/C++ code

random1=(char*)malloc(11);
memset(random1,'a',0);
memset(random1,'a',10);
cout<<random1<<endl;
[/Quote]
不好意思打快了
熊国明 2011-07-18
  • 打赏
  • 举报
回复

random1=(char*)malloc(11);
memset(random1,'a',11);
memset(random1,'a',10);
cout<<random1<<endl;

C++面试题 参考:http://blog.csdn.net/Ghost90/archive/2009/04/22/4099672.aspx 整理:松鼠 时间:2009-5-8 1、const 有什么用途?(请至少说明两种) 答: (1)可以定义 const 常量 (2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。 2、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”? 答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。 C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。 3、请简述以下两个for循环的优缺点(5分) for (i=0; i字符串,strSrc是源字符串。 (1)不调用C++/C的字符串库函数,请编写函数 strcpy char *strcpy(char* strDest, const char* strSrc) { assert((strDest!=NULL) && (strSrc !=NULL));//2分 char *address = strDest;//2分 while( (*strDest++ = * strSrc++) != ‘\0’ )//2分 NULL; return address;// 2分 } 5.1 strcpy能把strSrc的内容复制到strDest,为什么还要char * 类型的返回值? 答:为了实现链式表达式。 // 2分 例如int length = strlen( strcpy( strDest, "hello world") ); 6、编写类String的构造函数、析构函数和赋值函数(25分) 已知类String的原型为: class String { public: String(const char *str = NULL);//普通构造函数 String(const String &other);//拷贝构造函数 ~ String(void);// 析构函数 String & operate =(const String &other);// 赋值函数 private: char* m_data;// 用于保存字符串 }; 请编写String的上述4个函数。 标准答案: // String的析构函数 String::~String(void) // 3分 { delete [] m_data; // 由于m_data是内部数据类型,也可以写成delete m_data; } // String的普通构造函数 String::String(const char *str) // 6分 { if(str==NULL) { m_data = new char[1]; // 若能加NULL 判断则更好 *m_data = ‘\0’; } else { int length = strlen(str); m_data = new char[length+1]; // 若能加NULL 判断则更好 strcpy(m_data, str); } } // 拷贝构造函数 String::String(const String &other) // 3分 { int length = strlen(other.m_data); m_data = new char[length+1]; // 若能加NULL 判断则更好 strcpy(m_data, other.m_data); } // 赋值函数 String & String::operate =(const String &other) // 13分 { // (1) 检查自赋值 // 4分 if(this == &other) return *this; // (2) 释放原有的内存资源 // 3分 delete [] m_data; // ()分配新的内存资源,并复制内容// 3分 int length = strlen(other.m_data); m_data = new char[length+1]; // 若能加NULL 判断则更好 strcpy(m_data, other.m_data); // ()返回本对象的引用 // 3分 return *this; } 7、实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。 void DeleteNode(DuNode *p) { p->prior->next=p->next; p->next->prior=p->prior; } void InsertNode(DuNode *p, DuNode *s)//Node "s" is inserted after "p" { s->next=p->next; p->next->prior=s; p->next=s; s->prior=p; } 8、Windows程序的入口是哪里?写出Windows消息机制的流程。 WINDOWS入口是WinMain函数 消息机制的流程: 系统中发生了某个事件 Windows把这个事件翻译为消息,然后把它放到消息队列中 1. 应用程序从消息队列中接收到这个消息,把它存放在TMsg记录中 2. 应用程序把消息传递给一个适当的窗口的窗口过程 3. 窗口过程响应这个消息并进行处理 9.写一个函数,将其中的\t都转换成4个空格。 #include using namespace std; char* Convert_t(char *des,char *src) { char *temp; des=new char[100]; temp=des; while(*src!='\0') { if(*src=='\t') { src++; *des++=' '; *des++=' '; *des++=' '; *des++=' '; continue; } *des++=*src++; } *des='\0'; des=temp; return des; } int main() { char *t="asdf\tasd\tasasddas\\tdfasdf",*d; cout<cout< using namespace std; char *des=new char[100]; //全局变量的动态空间申请在程序运行之后,main运行之前完成。所以不是所有的动作都是main引起的。 int main() { char *des="abc"; cout<字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh” 正确解答1: void LoopMove(char* pStr, int steps) { int n = strlen( pStr ) - steps; char tmp[MAX_LEN]; strcpy ( tmp, pStr + n ); strcpy ( tmp + steps, pStr); *( tmp + strlen ( pStr ) ) = '\0'; strcpy( pStr, tmp ); } 正确解答2: void LoopMove(char* pStr,int steps ) { int n = strlen( pStr ) - steps; char tmp[MAX_LEN]; memcpy( tmp, pStr + n, steps ); memcpy(pStr + steps, pStr, n ); memcpy(pStr, tmp, steps ); } 14、写出输出结果 void fun(char s[10]) { char a[10]; cout<<"a:"<cout<<"s:"< main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 输出:2,5 *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5 &a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) int *ptr=(int *)(&a+1); 则ptr实际是&(a[5]),也就是a+5 原因如下: &a是数组指针,其类型为 int (*)[5]; 而指针加1要根据指针类型加上一定的值, 不同类型的指针+1之后增加的大小不同 a是长度为5的int数组指针,所以要加 5*sizeof(int) 所以ptr实际是a[5] 但是prt与(&a+1)类型是不一样的(这点很重要) 所以prt-1只会减去sizeof(int*) a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]

64,642

社区成员

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

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