CString 和 char* 的区别
#include <afx.h>
#include <stdio.h>
int main()
{
    char *s1 = "2o3i4jiojrewjeroiksopf";
    for(int i1=0;s1[i1]!=0;i1++) 
        printf("%c",s1[i1]);
    printf("\n");
    return 0;
}
使用以上代码时一切正常(编译欲行也正常)
#include <afx.h>
#include <stdio.h>
int main()
{
    char *s1 = "2o3i4jiojrewjeroiksopf";
    for(int i1=0;s1[i1]!=0;i1++) 
        printf("%c",s1[i1]);
    printf("\n");
    CString s2 = "2o3i4jiojrewjeroiksopf";
    for(int i2=0;s2[i2]!=0;i2++) 
        printf("%c",s2[i2]);
    printf("\n");
    return 0;
}
但是使用上面的代码时编译也是 0错误,0警告
而运行时出现错误(如附图)显然 CString 和 char* 存在很明显的区别,但是现在还没有搞清楚,希望大家一起讨论下

解决方案 »

  1.   

     CString 是不是不是使用 '\0' 结尾的 ??
      

  2.   

    CString s2 = "2o3i4jiojrewjeroiksopf"; 
    for(int i2=0;i2<s2.GetLength();i2++)  
    printf("%c",s2[i2]); 
    printf("\n"); 
      

  3.   

    其实不用这么复杂,到微软MSDN的网页上就有介绍,具体见:
    http://msdn2.microsoft.com/zh-cn/library/ms235631(VS.80).aspx
      

  4.   

    CString是可变长的字符串,支持“+”操作,是一个MFC的数据类型,有自己的方法 
    *char是C语言的基本类型数组 两者在物理存放上有本质的不同 
    *char就是连续存放的一段内存,每个字节就是一个字符 
    CString是较复杂的数据结构,有数据段和代码段之分 本质上,这两者的区别就是C与C++的区别
      

  5.   

    对很正确啊,6楼的兄弟说的好!“本质上,这两者的区别就是C与C++的区别”不过我现在想问一下:
     在WIN32平台下到底能不能使用CString!怎么用?需要转换吗?
      

  6.   

    显然 CString 和 char* 存在很明显的区别,但是现在还没有搞清楚,希望大家一起讨论下
    ==========================
    这两个根本就不是一回事,CString是MFC的封装类,char *是字长符串指针,虽然都是处理字符串的,但是从语言概念上说两者不是一回事.Win32平台下能不能用CString?你指的是在SDK下吧,好像能用,不过要加头文件.
      

  7.   

    Win32平台下也可以用CString,加头文件 Afx.h
    可以试下呢
      

  8.   

    fatal error C1189: #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
    我试了  可是出现了上面的错误!!!!
      

  9.   

    CString 是一个类,在C语言里面没的类的概念,
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {string s2 = "2o3i4jiojrewjeroiksopf"; 
            for(int i2=0;s2[i2]!='\0';i2++)  
        cout<<s2[i2];
       return 0;
    }
    应该在C++里面才有
      

  10.   

    CString类包含成员函数,char*没有
      

  11.   

    一个是类 
    一个是指针
    在C语言里根本就没有CString这一说。肯定会出错了。
      

  12.   

    谢谢大家这么热心的帮助
    首先我想说 三楼同志是对的
    用他的方式我成功了另外 VC控制台程序中也可以使用CString的
    知识需要增加头文件afx.h
    另外创建工程的时候需要支持MFC 模式的
      

  13.   

    补充一点CString已近被扩充为ATL的了
      

  14.   

     char *s1 = "2o3i4jiojrewjeroiksopf"; 
        for(int i1=0;s1[i1]!=0;i1++)  
            printf("%c",s1[i1]); 代码有问题 for(int i1=0;s1[i1]!="\0";i1++)  
      

  15.   

    代码有问题 for(int i1=0;s1[i1]!='\0';i1++)