導航:首頁 > 源碼編譯 > 編譯後為什麼會出現符串

編譯後為什麼會出現符串

發布時間:2022-04-04 15:56:49

『壹』 這個程序編譯時沒錯 在運行後 會在復制後的字元串後面出現奇怪的圖形 為什麼高手看看

char* p;
scanf("%s",p);//p是指針,如果要存放字元的話,需要先分配空間給它...修改如下:
#include <stdio.h>
#include<stdlib.h>

int main(void)
{
char* p;
p=(char *)malloc(sizeof(char));
scanf("%s",p); // o: abc , x: abcd ???
printf("\n %s",p);
free(p);//記得釋放內存,(*^__^*) 嘻嘻……
return 0;
};

『貳』 字元串應該用equals,但是用==,編譯的時候為什麼沒有顯示出錯

對於字元串來說==比較的是兩個字元串的內存地址是否一樣,equals比較的是兩個字元串的內容是否相同。所以用==不會報錯,但是會返回false。

『叄』 執行下列C++程序之後,為什麼會出現一大串字元"燙"呢怎麼解決這個問題

你好,在C或者C++編譯器中,字元串是以'\0'結尾,比如輸出字元串到控制台時,會從字元指針指向的第一個字元開始,一直輸出知道遇到'\0'字元。

這里,在輸出zi數組時,zi數組里沒有'\0'字元,因此,輸出會超出zi數組大小,直到遇到'\0'字元,當然,超出部分都是一些原始內存,即我們看到的「燙」。

建議你在初始化zi數組前,將數組所有元素置為'\0',這樣基本可以保證不會出現亂碼。

『肆』 c語言數據輸出中為什麼會後面多出字元串

C語言字元串類型為char *或char []

兩者本質上是一樣的

例如:

char*x="abc";

x指向'a'

x+1指向'b'

x+2指向'c'

x+3指向''

C語言在輸出x時

從x指向的內容開始輸出,一直到''為止

用char *定義x,會自動在末尾加上''

但用char []定義x,可能末尾沒有''

如:

charx[3]={'a','b','c'};

此時系統輸出x+2指向的'c'後

x+3不一定指向''

系統將會繼續輸出

直到發現''為止

所以C語言用字元串一定要特別小心

『伍』 字元║在c++編譯之後輸出U是怎麼回事

是的,對於編譯器來說,名字是不一樣而且唯一的,編譯器會對函數名「修飾」。

C++ 編譯器的函數名修飾規則

函數名字修飾(Decorated Name)方式

函數的名字修飾(Decorated Name)就是編譯器在編譯期間創建的一個字元串,用來指明函數的定義或原型。LINK程序或其他工具有時需要指定函數的名字修飾來定位函數的正確位置。多數情況下程序員並不需要知道函數的名字修飾,LINK程序或其他工具會自動區分他們。當然,在某些情況下需要指定函數的名字修飾,例如在C++程序中,為了讓LINK程序或其他工具能夠匹配到正確的函數名字,就必須為重載函數和一些特殊的函數(如構造函數和析構函數)指定名字裝飾。另一種需要指定函數的名字修飾的情況是在匯編程序中調用C或C++的函數。如果函數名字,調用約定,返回值類型或函數參數有任何改變,原來的名字修飾就不再有效,必須指定新的名字修飾。C和C++程序的函數在內部使用不同的名字修飾方式,下面將分別介紹這兩種方式。

1. C編譯器的函數名修飾規則

對於__stdcall調用約定,編譯器和鏈接器會在輸出函數名前加上一個下劃線前綴,函數名後面加上一個「@」符號和其參數的位元組數,例如_functionname@number。__cdecl調用約定僅在輸出函數名前加上一個下劃線前綴,例如_functionname。__fastcall調用約定在輸出函數名前加上一個「@」符號,後面也是一個「@」符號和其參數的位元組數,例如@functionname@number

2. C++編譯器的函數名修飾規則

C++的函數名修飾規則有些復雜,但是信息更充分,通過分析修飾名不僅能夠知道函數的調用方式,返回值類型,參數個數甚至參數類型。不管__cdecl,__fastcall還是__stdcall調用方式,函數修飾都是以一個「?」開始,後面緊跟函數的名字,再後面是參數表的開始標識和按照參數類型代號拼出的參數表。對於__stdcall方式,參數表的開始標識是「@@YG」,對於__cdecl方式則是「@@YA」,對於__fastcall方式則是「@@YI」。參數表的拼寫代號如下所示:
X--void
D--char
E--unsigned char
F--short
H--int
I--unsigned int
J--long
K--unsigned long(DWORD)
M--float
N--double
_N--bool
U--struct
....
指針的方式有些特別,用PA表示指針,用PB表示const類型的指針。後面的代號表明指針類型,如果相同類型的指針連續出現,以「0」代替,一個「0」代表一次重復。U表示結構類型,通常後跟結構體的類型名,用「@@」表示結構類型名的結束。函數的返回值不作特殊處理,它的描述方式和函數參數一樣,緊跟著參數表的開始標志,也就是說,函數參數表的第一項實際上是表示函數的返回值類型。參數表後以「@Z」標識整個名字的結束,如果該函數無參數,則以「Z」標識結束。下面舉兩個例子,假如有以下函數聲明:

int Function1 (char *var1,unsigned long);
其函數修飾名為「?Function1@@YGHPADK@Z」,而對於函數聲明:
void Function2();
其函數修飾名則為「?Function2@@YGXXZ」 。

對於C++的類成員函數(其調用方式是thiscall),函數的名字修飾與非成員的C++函數稍有不同,首先就是在函數名字和參數表之間插入以「@」字元引導的類名;其次是參數表的開始標識不同,公有(public)成員函數的標識是「@@QAE」,保護(protected)成員函數的標識是「@@IAE」,私有(private)成員函數的標識是「@@AAE」,如果函數聲明使用了const關鍵字,則相應的標識應分別為「@@QBE」,「@@IBE」和「@@ABE」。如果參數類型是類實例的引用,則使用「AAV1」,對於const類型的引用,則使用「ABV1」。下面就以類CTest為例說明C++成員函數的名字修飾規則:

1
2
3
4
5
6
7
8
9
10
11
12

class CTest
{
......
private:
void Function(int);
protected:
void CopyInfo(const CTest &src);
public:
long DrawText(HDC hdc, long pos, const TCHAR* text, RGBQUAD color, BYTE bUnder, bool bSet);
long InsightClass(DWORD dwClass) const;
......
};

對於成員函數Function,其函數修飾名為「?Function@CTest@@AAEXH@Z」,字元串「@@AAE」表示這是一個私有函數。成員函數CopyInfo只有一個參數,是對類CTest的const引用參數,其函數修飾名為「?CopyInfo@CTest@@IAEXABV1@@Z」。DrawText是一個比較復雜的函數聲明,不僅有字元串參數,還有結構體參數和HDC句柄參數,需要指出的是HDC實際上是一個HDC__結構類型的指針,這個參數的表示就是「PAUHDC__@@」,其完整的函數修飾名為「?DrawText@CTest@@QAEJPAUHDC__@@JPBDUtagRGBQUAD@@E_N@Z」。InsightClass是一個共有的const函數,它的成員函數標識是「@@QBE」,完整的修飾名就是「?InsightClass@CTest@@QBEJK@Z」。

『陸』 在c語言中哪幾種初始化字元串時,編譯器會自動給字元串加上結束符

strncpy(gps_gprmc.gps11_date,p1,(gps_td-1));
這一句是將p1(p1是個字串)中取前(gps_td-1)的字元組成的子串,然後給gps_gprmc.gps11_date。(請注意這里所指向的內容不再是0了)
gps_gprmc.gps11_date[gps_td-1]
=
0;這個就很好理解了,就是將這個子字串的第gps_td-1個字元取為0。
希望對你有幫助

『柒』 在不同的c語言程序中,同一字母編譯後產生的字元串一樣嗎

你想表達什麼?
C語言是個標准,它只有一種,目前最新的是ISO
C
11(C的編譯器有多種,而C的源程序就無數了)
另外一個字母怎麼可能產生一個串?

『捌』 輸出字元串的時候為什麼會出現小方塊(C語言)

一、輸出格式可能不對,建議改變一下輸出格式再試試,實在不行就把所有的的格式實驗一遍,個人覺得使用s%輸出應該就沒問題了。
二、編碼方式設置不一致,建議使用某pad++打開,修改統一編碼,建議UTF-8,然後再重新編譯運行,還有就是設置編譯器的默認編碼。

閱讀全文

與編譯後為什麼會出現符串相關的資料

熱點內容
如何將數據傳到伺服器查找伺服器讀取數據 瀏覽:1002
怎麼知道伺服器上是否在運行代碼 瀏覽:854
單片機多聯機 瀏覽:214
知乎軟體源碼 瀏覽:295
解壓音頻最新消息 瀏覽:115
如何弄崩一個mc伺服器 瀏覽:136
執行命令怎麼取消 瀏覽:902
美拍app長什麼樣 瀏覽:294
android滾動選擇圖片 瀏覽:484
有什麼畫畫app能把照片放上去畫 瀏覽:395
如何自己架設域名伺服器 瀏覽:311
ktv網站php源碼 瀏覽:957
啟信寶app干什麼的 瀏覽:996
解壓助眠快速采耳 瀏覽:875
手機視頻文字編程軟體 瀏覽:251
畫出圓的命令 瀏覽:842
三星快捷命令怎麼用 瀏覽:451
手機怎麼取消手機加密的密碼 瀏覽:175
別克車機為什麼開放裝app 瀏覽:583
qt做個編譯器 瀏覽:120