當前位置:首頁 » 編程語言 » c語言連接後存放在什麼位置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言連接後存放在什麼位置

發布時間: 2022-03-30 01:39:18

A. 用c語言寫的關於文件的,它會保存在哪裡呀,哪位大神告訴我,謝謝

保存在哪裡,關鍵看你的函數怎麼寫了,如果你沒有使用絕對路徑,則是放在你所建工程,或者你程序所在的同一個目錄下如:fopen("my_note.txt","rw");
如果你想打開其他路徑的文件就得加絕對路徑比如:
fopen("c:\my_note.txt","rw");就行了

B. c語言文件 存放的位置

存放到計算機分配的內存下,程序關閉就會清空,如果你用文本文件來存放,就不一樣了,信息會保存在文件下

C. c語言程序運行時的資料保存在什麼地方


不同編譯器對C標准支持程度不一樣,所以報錯信息不一樣而已;
我用Code::b;locks這個IDE(用的編譯器是GCC)報的錯是
warning: the `gets' function is dangerous and should not be used.
大概是因為這個函數的返回值沒有被接受吧,可以忽略這個警告。
運行程序,用你的數據測試了下,程序執行錯誤……
發現代碼中下面這句錯了
printf("%s by %s :$%.2f\n",library[index].value);
改為
printf("%s by %s :$%.2f\n",library[index].title,library[index].author,library[index].value);
用你的數據測試了一下,程序正常運行。
另外,我覺得while(count<MAXBKS&&gets(library[count].title)!=NULL&&library[count].title[0]!='\0')這么寫不是很好,這個判斷依賴語句的執行順序,而這個順序C標準是沒有規定的,由編譯器實現,這樣在不同環境下可能會出現問題,個人看法……

D. C語言中函數調用完的返回值儲存在哪裡

C語言里規定:16bit程序中,返回值保存在ax寄存器中,32bit程序中,返回值保持在eax寄存器中,如果是64bit返回值,edx寄存器保存高32bit,eax寄存器保存低32bit。

E. C語言運行完後保存什麼

找到debug文件夾,這個文件夾跟你說的cpp文件、dsw文件都在一起的,exe就在這個文件夾裡面。

F. C語言頭文件的位置

C語言中的頭文件一般分為兩類,一類是標准庫頭文件,一類是用戶自定義頭文件。

1、標准庫頭文件,不同的編譯器都不相同。

Vc6.0一般在安裝目錄下的\VC98\INCLUDE目錄,比如C:\Program Files (x86)\Microsoft Visual Studio\VC98\INCLUDE。
Vs一般在位於$VSPATH\VC\include路徑下面。

gcc一般默認在 /usr/include目錄下。

2、用戶自定義頭文件,存儲位置有用戶自定義。

G. 誰能給我講一下C語言中程序以及各類型數據存儲位置

我想很多人也是糊塗,以下文章寫得很好,故全文轉來,慢慢體會。

程序的內存分配(堆和棧區別)

一、預備知識 程序的內存分配

一個由c/C++編譯的程序佔用的內存分為以下幾個部分
1、棧區(stack) 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。
2、堆區(heap) 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。
3、全局區(靜態區)(static),全局變數和靜態變數的存儲是放在一塊的,初始化的全局變數和靜態變數在一塊區域, 未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。 - 程序結束後有系統釋放
4、文字常量區 ?常量字元串就是放在這里的。 程序結束後由系統釋放
5、程序代碼區?存放函數體的二進制代碼。
二、例子程序
這是一個前輩寫的,非常詳細
//main.cpp
int a = 0; 全局初始化區
char *p1; 全局未初始化區
main()
{
int b; 棧
char s[] = "abc"; 棧
char *p2; 棧
char *p3 = "123456"; 123456\0在常量區,p3在棧上。
static int c =0; 全局(靜態)初始化區
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得來得10和20位元組的區域就在堆區。
strcpy(p1, "123456"); 123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一個地方。
}

二、堆和棧的理論知識

2.1申請方式
stack:
由系統自動分配。 例如,聲明在函數中一個局部變數 int b; 系統自動在棧中為b開辟空間
heap:
需要程序員自己申請,並指明大小,在c中malloc函數
如p1 = (char *)malloc(10);
在C++中用new運算符
如p2 = (char *)malloc(10);
但是注意p1、p2本身是在棧中的。

2.2
申請後系統的響應
棧:只要棧的剩餘空間大於所申請空間,系統將為程序提供內存,否則將報異常提示棧溢出。
堆:首先應該知道操作系統有一個記錄空閑內存地址的鏈表,當系統收到程序的申請時,
會遍歷該鏈表,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閑結點鏈表中刪除,並將該結點的空間分配給程序,另外,對於大多數系統,會在這塊內存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語句才能正確的釋放本內存空間。另外,由於找到的堆結點的大小不一定正好等於申請的大小,系統會自動的將多餘的那部分重新放入空閑鏈表中。

2.3申請大小的限制
棧:在Windows下,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是2M(也有的說是1M,總之是一個編譯時就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小。
堆:堆是向高地址擴展的數據結構,是不連續的內存區域。這是由於系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限於計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。

2.4申請效率的比較:
棧由系統自動分配,速度較快。但程序員是無法控制的。
堆是由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便.
另外,在WINDOWS下,最好的方式是用VirtualAlloc分配內存,他不是在堆,也不是在棧是直接在進程的地址空間中保留一快內存,雖然用起來最不方便。但是速度快,也最靈活。

2.5堆和棧中的存儲內容
棧: 在函數調用時,第一個進棧的是主函數中後的下一條指令(函數調用語句的下一條可執行語句)的地址,然後是函數的各個參數,在大多數的C編譯器中,參數是由右往左入棧的,然後是函數中的局部變數。注意靜態變數是不入棧的。
當本次函數調用結束後,局部變數先出棧,然後是參數,最後棧頂指針指向最開始存的地址,也就是主函數中的下一條指令,程序由該點繼續運行。
堆:一般是在堆的頭部用一個位元組存放堆的大小。堆中的具體內容有程序員安排。

2.6存取效率的比較

char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa是在運行時刻賦值的;
而bbbbbbbbbbb是在編譯時就確定的;
但是,在以後的存取中,在棧上的數組比指針所指向的字元串(例如堆)快。
比如:
#include
void main()
{
char a = 1;
char c[] = "1234567890";
char *p ="1234567890";
a = c[1];
a = p[1];
return;
}
對應的匯編代碼
10: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
0040106A 88 4D FC mov byte ptr [ebp-4],cl
11: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
00401070 8A 42 01 mov al,byte ptr [edx+1]
00401073 88 45 FC mov byte ptr [ebp-4],al
第一種在讀取時直接就把字元串中的元素讀到寄存器cl中,而第二種則要先把指針值讀到edx中,在根據edx讀取字元,顯然慢了。

2.7小結:
堆和棧的區別可以用如下的比喻來看出:
使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等准備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。
使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,而且自由度大

一般認為在c中分為這幾個存儲區

1棧 - 有編譯器自動分配釋放
2堆 - 一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收
3全局區(靜態區),全局變數和靜態變數的存儲是放在一塊的,初始化的全局變數和靜態變數在一塊區域,未初始化的全局變數和未初始化的靜態變數在相鄰的另一塊區域。- 程序結束釋放
4另外還有一個專門放常量的地方。 - 程序結束釋放
在函數體中定義的變數通常是在棧上,用malloc, calloc, realloc等分配內存的函數分配得到的就是在堆上。在所有函數體外定義的是全局量,加了static修飾符後不管在哪裡都存放在全局區(靜態區),在所有函數體外定義的static變數表示在該文件中有效,不能extern到別的文件用,在函數體內定義的static表示只在該函數體內有效。另外,函數中的"adgfdf"這樣的字元串存放在常量區。比如:

代碼:

int a = 0; //全局初始化區
char *p1; //全局未初始化區
main()
{

int b; //棧
char s[] = "abc"; //棧
char *p2; //棧
char *p3 = "123456"; //123456\0在常量區,p3在棧上。
static int c = 0; //全局(靜態)初始化區
p1 = (char *)malloc(10);
p2 = (char *)malloc(20); //分配得來得10和20位元組的區域就在堆區。
strcpy(p1, "123456"); //123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一塊。
}

還有就是函數調用時會在棧上有一系列的保留現場及傳遞參數的操作。棧的空間大小有限定,vc的預設是2M。棧不夠用的情況一般是程序中分配了大量數組和遞歸函數層次太深。有一點必須知道,當一個函數調用完返回後它會釋放該函數中所有的棧空間。棧是由編譯器自動管理的,不用你操心。
堆是動態分配內存的,並且你可以分配使用很大的內存。但是用不好會產生內存泄漏。並且頻繁地malloc和free會產生內存碎片(有點類似磁碟碎片),因為c分配動態內存時是尋找匹配的內存的。而用棧則不會產生碎片。

在棧上存取數據比通過指針在堆上存取數據快些。一般大家說的堆棧和棧是一樣的,就是棧(stack),而說堆時才是堆heap。棧是先入後出的,一般是由高地址向低地址生長。

H. C語言中全局變數存放在內存空間中那個位置

在 C 語言中,內存分配方式有以下三種形式:

1、從靜態存儲區域分配
由編譯器自動分配和釋放,在程序編譯的時候就已經分配好內存,這塊內存在程序的整個運行期間都存在,直到整個程序運行結束時才被釋放,如全局變數與 static 變數。

2、在棧上分配
同樣由編譯器自動分配和釋放,在函數執行時,函數內部的局部變數都可以在棧上創建,函數執行結束時,這些存儲單元將則被自動釋放。

需要注意的是,棧內存分配運算內置於處理器的指令集中,它的運行效率一般很高,但是分配的內存容量有限。

3、從堆上分配
也稱為動態內存分配,由程序員手動完成申請和釋放。程序在運行的時,由程序員使用內存分配函數(如 malloc 函數)來申請內存,使用完之後再由程序員自己負責使用內存釋放函數(如 free 函數)來釋放內存。

需要注意的是,如果在堆上分配了內存空間,就必須及時釋放它,否則將會導致運行的程序出現內存泄漏等錯誤。

在 C 語言中,不同類型變數的存儲位置和作用域也有所不同。

全局變數
從靜態存儲區域分配,其作用域是全局作用域,也就是整個程序的生命周期內都可以使用。如果程序是由多個源文件構成的,那麼全局變數只要在一個文件中定義,就可以在其他所有的文件中使用,但必須在其他文件中通過使用extern關鍵字來聲明該全局變數。

全局靜態變數
從靜態存儲區域分配,其生命周期也是與整個程序同在的,從程序開始到結束一直起作用。與全局變數不同的是,全局靜態變數作用域只在定義它的一個源文件內,其他源文件不能使用。

局部變數
從棧上分配,其作用域只是在局部函數內,在定義該變數的函數內,只要出了該函數,該局部變數就不再起作用,也即該變數的生命周期和該函數同在。

局部靜態變數
從靜態存儲區域分配,其在第一次初始化後就一直存在直到程序結束。該變數的特點是其作用域只在定義它的函數內可見,出了該函數就不可見了。

I. C語言的頭文件怎麼做做了之後保存在哪保存了之後怎麼用我用的是VC++6.0

通常自己寫的頭文件和自己寫的源文件放在一起:
例如下列a.h和a.c文件放在同一項目目錄下
使用頭文件可以用#include關鍵字(自己定義的頭文件建議使用" ",系統的使用<>)

//a.h
#ifndef A_H
#define A_H

int add(int a,int b);

#endif

然後在另一個c文件裡面實現add()函數
//add.c
#include "a.h"
int add(int a,int b){return a+b;}

之後再在其他自己的c文件裡面用add()函數的話:
//main.c
#include <stdio.h>
#include "a.h"
int main(){
printf("1+1=%d\n",add(1,1));
return 0;
}

以上是一個小小的例子程序,幫助理解!

J. c語言中建立的文件默認保存在什麼地方。在線等。

如果是用的VC6那麼在Debug同級的文件夾