注册 登录
编程论坛 C++教室

C++中字符串输出问题

关鱼 发布于 2011-12-14 20:52, 4529 次点击
程序代码:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int i = 0;
    char *name = new char[];
    cin>>name;
    char* first = new char[strlen( name ) + 1 ];
    strcpy( first,name );
    char p='\0';
    while(*first != p)
        cout<<first[i++];
    cout<<first<<endl;
   
   
   
    return 0;
}
我想的是在while那句的末尾编译器会自动添加字符'\0',因为给定的空间刚好够,strlen( name ) + 1,当输出碰到'\0'会自动停止,然而编译时后不自动停止
还有个想法就是在取长度时候加一,即为strlen( name ),会不会正确执行而不越位.
4 回复
#2
共和国鹰派2011-12-15 00:11
char *name = new char[];动态分配空间没有这么写的,你这样的是不正确的,并且如果我没猜错你的#include<string>是为了使用strcpy之类的函数,但是在C++中<string>头文件是一个不同于C语言中的头文件,string可以动态的分配内存,从而可以使用string存储字符串而不必担心或出现超出范围的错误
#3
lonely_212011-12-15 00:16
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int i = 0;
    char *name = new char[];
    cin>>name;
    char* first = new char[strlen( name ) + 1 ];
    strcpy( first,name );
    char p='\0';
    while(first[i] != p)    //这块你写成*first指向的永远是第一个字符,所以如果你输入了字符,它就永远不可能为'\0'
       cout<<first[i++];
    cout<<endl;
    cout<<first<<endl;
    return 0;
}
明白了吗
#4
waterstar2011-12-16 11:41
cout<<first[i++];
可以改成这样
cout << *first++;
当然楼上的改法也正确,只是会输出两行字符串,相信这不是你的目的,你是想通过指针来访问数组中元素的值,不知道我的猜想对不对?

祝愉快~
#5
qingpan5212011-12-19 14:13
我也是菜鸟,没事交交我。
1