1. 程式人生 > >C++ 字串字面值常量的問題

C++ 字串字面值常量的問題

1:形式如: char* str=字面值常量

如下面程式碼: 

 char*  pc= "10000";
  *(pc + 1) = '1';
  cout << pc << endl;
  cout << *pc << endl;

這裡會報一個記憶體寫入異常:異常的原因為:當一個字串字面值常量賦值給char* 指標時,是把當前字面值常量的指標賦給了char* 指標,但是接下來char*指標又要去改變這個指標所指區域的值(就是這個字面值常量),結果就導致Access violation writing location異常。

解決辦法:就是char* pc換成陣列的形式,把字面值常量初始化(陣列不能賦值,只能初始化)陣列,這樣,就不會發生異常。

2:形式如: char pc[10]="1245";

這裡的字面值常量等同於初始化陣列

 char pc[10]= "10000";
  *(pc + 1) = '1';
  cout << pc << endl;
  cout << *pc << endl;

這裡不會報錯的。

這裡有人就問了,陣列本身不就是個指標嗎?憑什麼1就報錯,2就不報錯?

這裡就涉及C++編譯的問題,高大上的,我也不懂。

相關推薦

C++字串面值常量解析(string literal)

首先本文的物件是這麼一段程式碼: char * getResult0() { char *s = "This is a string"; return s; }char * getResult1() { char s[] = "This is a string";

C++ 字串面值常量的問題

1:形式如: char* str=字面值常量 如下面程式碼:   char*  pc= "10000";   *(pc + 1) = '1';   cout << pc << endl;   cout << *pc << en

C++中面值常量面值型別

作者:zhaojia92  來源:CSDN  原文:https://blog.csdn.net/zhaojia92/article/details/50831436  版權宣告:本文為博主原創文章,轉載請附上博文連結!      

網絡編程中的常見陷阱之 0x十六進制數(C++面值常量

十六進制 aid word 網絡編程 情況 技術分享 fill 截斷 常見 十六進制數相等的推斷 請問例如以下程序的輸出是神馬? #include <iostream> #include <string> using namespace std

字串面值C風格字串C++風格字串

一、字串字面值 字串字面值是一串常量字元,字串字面值常量用雙引號括起來的零個或多個字元表示,為相容C語言,C++中所有的字串字面值都由編譯器自動在末尾新增一個空字元。 字串沒有變數名字,自身表示自身 "Hello World!" //simple string literal "" //em

C/C++中的面值常量常量以及變數

1.字面值常量 在C/C++中,4、3.1415926、0x24、"BEIJING"等等,都稱為字面值常量。稱之為字面值是因為只能用它的值來稱呼它,稱為為常量是因為它的值不能被修改。舉例說明: 20、

c字串、string物件、字串面值的區別

一、字串字面值 字串字面值是一串常量字元,字串字面值常量用雙引號括起來的零個或多個字元表示,為相容C語言,C++中所有的字串字面值都由編譯器自動在末尾新增一個空字元。 字串沒有變數名字,自身表示自身 "Hello World!" //simple string l

C++11 理解 (十八) 之 字串面值

標準C++提供了兩種字串字面值。第一種,包含有雙引號,產生以空字元結尾的const char陣列。第二種有著前標L,產生以空字元結尾的const wchar_t陣列,其中wchar_t代表寬字元。對於Unicode編碼的支援尚付闕如。 為了加強C++編譯器對Unicod

Intellij 編譯時報 未結束的字串面值

1 把所有的檔案改為 一個格式(在setting 和 other setting  的editor 都有編碼格式)   2在每個檔案的 idea.xml  改為一種格式的·編碼,多改幾次,然後跑一下,再改,就行了   參考 https

hadoop編譯原始碼報錯:package-info.java: 未結束的字串面值

compile-core-classes:        [javac] Compiling 386 source files to F:\hadoop\common\trunk\build\classes        [javac] F:\hadoop\common\trunk\build\src\org

IntelliJ IDEA 編譯時報錯:“編碼UTF8的不可對映字元”和"未結束的字串面值"

解決辦法: Setting->File Encodings->Project Encoding選擇utf-8,Default encoding for properties files

IntelliJ IDEA 12 編譯時報錯:“編碼GBK的不可對映字元”,"未結束的字串面值"和非法的型別開始

使用12版本時,匯入eclipse的程式碼會出現如上問題,想了一下應該是編碼問題。不羅嗦之間給出解決流程: Setting->File Encodings->IDE Encoding選擇utf-8,不要選擇“system default” 同時,Default

idea 14(or maven) 未結束字串面值 非法的表示式開始

[ERROR] *.java:[38,27] 未結束的字串字面值 [ERROR] *.java:[38,53] 需要 ';' [ERROR] *.java:[41,19] 需要 ')' [ERROR] *.java:[41,12] 不是語句 [ERROR]

Maven報錯“未結束的字串面值” “需要為 class、interface 或 enum”等

eclipse裡面編譯完全正常,mvn clean install 這麼慘的錯誤:Compilation failure: [ERROR] *.java:[38,27] 未結束的字串字面值 [ERROR] *.java:[38,53] 需要 ';' [ERROR] *.ja

Android Studio 提示:未結束的字串面值

第一個 :先看看 這個地方是不是UTF-8 第二:如果 第一不行,那麼使用這個方法:  <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component

為什麼C++中常量引用可以繫結非常量的物件、面值和一般表示式 詳解

    在c++語言中,除兩種例外情況,其他引用的型別都要和與之繫結的物件嚴格匹配,如int型的引用只能繫結int型的物件;並且引用不能直接與字面值常量或表示式結果繫結。    其中一種例外情況是:初始化常量引用時,允許用任意表達式作為初始值,只要該表示式的結果能轉換成引用的

C符串常量符數組

gcc pre class fun 後者 一段 put light cmp 此次博客是轉載某位博主的文章,不過現在找不到了,所以先聲明一下。 先貼一段代碼: #include <stdio.h> int main(int argc, const char**

動態數組、C風格符串、符串面值

空字符 字符 產生 init 文件 c++標準庫 缺少 int store 動態數組 每一個程序在執行時都占用一塊可用的內存空間,用於存放動態分配的對象,此內存空間稱為程序的自由存儲區(free store)或堆(heap)。C語言使用malloc和free在堆中分配存儲空

c++11 原生字符串面值

標識 stream c++ 簡單 cout fine def 字符 pan c++11 原生字符串字面值 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string>

C++字串常量定義方式選擇

#define HELLO "Hello World" const char *HELLO2 = "Howdy"; What do you prefer? If possible show some drawbacks of eithermethod. There's one more (