首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 新手疑惑:為什麼輸出字符指針不是字符串內容?

     編輯:程式設計疑難解答

問題代碼分析

char *str = new char[100];
strcpy(str, "hello imooc");
cout << "*str";  // 輸出單個字符 'h'

核心誤區

cout << "*str" 中的 *str 是解引用操作,取得的是 str[0] 即首字符 'h',而非整個字符串。

正確輸出方式

1. 直接輸出指針(推薦)

cout << str;  // 輸出 "hello imooc"

operator<<(ostream&, const char*) 重載會從指針地址開始讀取直至遇到 \0。

2. 獲取字符串長度

cout << strlen(str);  // 輸出 11

3. 獲取數組分配大小(僅適用於棧上數組)


char arr[100];
strcpy(arr, "hello imooc");
cout << sizeof(arr);  // 輸出 100(字節數)
// 注意:對指針 sizeof(str) 僅得指針大小(4/8 字節)

完整修正示例

#include 
#include 
using namespace std;

int main() {
    // 動態分配
    char *str = new char[100];
    strcpy(str, "hello imooc");
    
    cout << "字符串內容: " << str << endl;
    cout << "字符串長度: " << strlen(str) << endl;
    cout << "首字符: " << *str << endl;
    
    delete[] str;
    
    // 棧上數組(可用 sizeof)
    char arr[100] = "hello imooc";
    cout << "\n數組大小: " << sizeof(arr) << " 字節" << endl;
    cout << "有效長度: " << strlen(arr) << endl;
    
    return 0;
}

關鍵知識點總結

表達式類型含義示例輸出
strchar*字符串首地址0x7ffe...
*strchar首字符 str[0]'h'
str[i]char第 i+1 個字符'e'
strlen(str)size_t字符串有效長度(不含 \0)11
sizeof(str)size_t指針變量自身大小8 (64位)
sizeof(arr)size_t數組總字節數100

避坑建議

  1. 優先使用 std::string 替代裸指針操作
  2. 動態分配記得 delete[],避免內存洩漏
  3. 調試時用 cout << "str=" << str 而非 *str
  4. 理解指針與數組的區別:char* 是地址,char[100] 是內存塊
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved