A. c語言中NULL是什麼意思
是空指針,指向地址為0的內存,在用法上,常用來表示不存在,x0dx0a例:if((fp=fopen("stu","rb"))==NULL)x0dx0a exit(0);x0dx0a解析:如果打開的這個名為stu的文件不存在,就退出程序;
B. C語言中NULL是什麼意思
在C語言中,NULL和0的值都是一樣的,但是為了目的和用途及容易識別的原因,NULL用於指針和對象,0用於數值。對於字元串的結尾,使用'\0',它的值也是0,但是讓人一看就知道這是字元串的結尾,不是指針,也不是普通的數值。
拓展資料:
關於NULL的使用
編程工作中有一類比較容易犯的錯誤--指針地址未進行正確的更新賦值就加以使用,這往往會造成很嚴重的後果(對內存區進行錯誤的塗抹)。所以一個良好的習慣是,當一個指針的工作稍事休息,先把它賦值為NULL,待到再度使用時,重新對其賦值以及進行指針類型轉化。
前面說到"NULL指針無法再進行任何數據訪問",其實是視編譯器功能而定的。0位置指向的是程序起始,對於不同的編譯器,NULL指針的操作結果是不同的:有些是不準讀寫,有些是只讀,甚至讀寫都允許。編譯器是人定的。
C. C語言字元數組為什麼輸出了null
strcat和strcat_s的返回值是不一樣的,你用strcat可以這么寫,因為返回的是合並後字串的地址,但strcat_s返回不是地址,返回的是錯誤碼,0表示成功,你這里返回的是0,所以就是null
D. C語言中是NULL什麼意思
c語言null的意思和0的值是一樣的,用於指針和對象。
C語言是一門面向過程的計算機編程語言,與C++、Java等面向對象編程語言有所不同。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、僅產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
C語言描述問題比匯編語言迅速,工作量小、可讀性好,易於調試、修改和移植,而代碼質量與匯編語言相當。C語言一般只比匯編語言代碼生成的目標程序效率低10%到20%。因此,C語言可以編寫系統軟體。
(4)c語言運行一直出現null擴展閱讀
常量與變數
常量其值不可改變,符號常量名通常用大寫。
變數是以某標識符為名字,其值可以改變的量。標識符是以字母或下劃線開頭的一串由字母、數字或下劃線構成的序列,請注意第一個字元必須為字母或下劃線,否則為不合法的變數名。變數在編譯時為其分配相應存儲單元。
數組
如果一個變數名後面跟著一個有數字的中括弧,這個聲明就是數組聲明。字元串也是一種數組。它們以ASCII的NULL作為數組的結束。要特別注意的是,中括弧內的索引值是從0算起的。
E. c語言 讀文件 結果為null是什麼情況
大多數情況下為0
可以從頭文件中看到其宏定義
#ifndefNULL
#ifdef__cplusplus
#defineNULL0
#else
#defineNULL((void*)0)
#endif
#endif
#defineoffsetof(s,m)(size_t)&(((s*)0)->m)
F. C語言中NULL是什麼意思
樸素的0值或者無類型的0值(void 0)
計算機語言中為了確定數據寬度(佔用位元組數)以及數據編碼,一般都是有類型定義的,比如C語言中bool為8位邏輯值(單位元組),int 為16位整數(雙位元組),long 為32位整數(4位元組),float是32位浮點數(4位元組),double為64位浮點數(8位元組),等等。
因此,數據類型定義了數據寬度和數據編碼,因此嚴格意義上說,一個16位整數的0與一個32位整數的0,以及浮點數的0都是不同的,原因是數據寬度不同,特別是浮點數的0不是絕對的0值,它可能是一個0.0000000000000001很小的數,但是有時候我們需要一個明確的通用的或者一般意義的0值來表示無效值,比如為了表示指針未被賦預有效地址,我們設置一個0值,為了防止代碼有歧義,也為了可讀性(一看就知道表示未定義指針),所以C或者C++中都使用一個特殊定義NULL表示無效值,其本質就是未定義具體數據類型的0值。
由於沒有定義數據類型,因此也就不具有具體數據寬度和編碼,當NULL賦值給16位變數時就是16位全0,當賦值給32位變數時,其值就是32個全0,也不會出現像浮點數那樣產生精度誤差。這就是虛類型的意義,任何編譯器都認可這種約定,這樣代碼移植的時候不會因為軟硬體環境改變而出現問題(CPU、編譯器改變)。
你可以在任何編譯器中,點擊NULL右鍵查看定義。
這里稍微解釋一下,上圖高亮部分是表示C++,也就是如果當前語言是C++,則直接定義NULL為 0值,如果是其他(可能是C),則明確定義為 void 0,因為C++編譯器會自動轉換。#ifndef 宏命令表示:如果當前環境中其他模塊還未定義NULL,這就定義它。
G. c語言,運行出現 stream !=NULL,而且不用文件直接在dos輸入結果有誤,兩個問題,求助,好好痛苦。。
讀文件,讀語句要配合文件里的數據。
你沒有給出數據例子,所以不好說哪裡有問題。
按你的程序,輸入文件第一個數是 n
然後讀 n 個 名字。
接著 做 n 次 大循環
讀1 個名字, 讀2個整數,如果第2個整數number 是 0,循環結束,
否則 k 循環number 次,讀名字,調finder()和計算。
finder() 程序 里,控制條件不全,當找不到時怎麼辦?
giver=np[j].money/np[j].number; // 這種除法有精度問題,最好用 float 型。
==========
假定是這個數據,程序可以通過
3
Zhang
Wang
Li
Wang
8
2
Zhang
Li
H. C語言中的NULL
在頭文件 中 定義的一個常量 NULL=0;
用於指將指針 懸空(不指向任何位置)樓上的指向0內存不對的.
int *p=NULL;
NULL是個好東西,給一出生的指針一個安分的家
NULL不是被定義為0,就是被定義為(void *)0,這兩種值幾乎是相同的。當程序中需要一個指針時(盡管編譯程序並不是總能指示什麼時候需要一個指針),一個純粹的零或者一個void指針都能自動被轉換成所需的任何類型的指針。
NULL總是等於0嗎?
對這個問題的回答與「等於」所指的意思有關。如果是指「與。比較的結果為相等」,例如:
if(/* ... */)
{
p=NULL;
}
else
{
p=/* something else */;
}
/* ... */
if(p==0)
那麼NULL確實總是等於0,這也就是空指針定義的本質所在。
如果是指「其存儲方式和整型值。相同」,那麼答案是「不」。NULL並不必須被存為一個整型值0,盡管這是NULL最常見的存儲方式。在有些計算機中,NULL會被存成另外一些形式。
如果想知道NULL是否被存為一個整型值0,可以(並且只能)通過調試程序來查看空指針的值,或者通過程序直接將空指針的值列印出來(如果將一個空指針強制轉換成整類型,那麼=所看到的很可能就是一個非零值)。
I. C語言中NULL問題
要想知道為什麼會出現死循環,首先必需明白while(gets(buff)!=NULL)這行代碼的含義。先看一下gets函數的聲明:
char *gets(
char *buffer
);
它有一個參數buffer,指向char類型的指針。指向輸入字元串緩沖區地址。如果函數調用成功則它的返回值為buffer的地址,如果調用失敗則返回NULL。
所以while(gets(buff)!=NULL)這行代碼就是只要gets函數調用失敗就停止循環,但一般這個函數調用失敗的機率是很小的,所以就出現了死循環。要明白這一點必需知道,gets函數的返回值為輸入字元串的地址,而NULL不等於空字元串,也不等於空字元串的地址。
把那個程序改為如下的形式就對了。
#include "stdio.h"
main()
{ char buff[256];
while(strcmp(gets(buff),"")!=0)
puts(buff);
}
/*註:strcmp為字元串比較的函數,當兩字元串相同時返回0*/
J. c語言為什麼我的運行結果會出現null,請大牛們幫幫
1.
你這個程序的功能是用來將兩個字元串合並起來
並實現輸出。
2.
你程序前面的合並都對,在輸出的地方,出錯了錯誤如下:
//printf("%s\n",str[i+j]);
//原來出錯的地方
printf("%s\n",str);
//改正後的地方
3.
下面是修改後的程序,已經可以輸出鏈接後的字元串了。
方法
#include<stdio.h>
void
main()
{
char
str1[50],str2[50],str[50];
int
i,j;
printf("input
str1:\n");
scanf("%s",str1);
printf("input
str2:\n");
scanf("%s",str2);
for(i=0;str1[i]!='\0';i++)
{
str[i]=str1[i];
}
for(j=0;str2[j]!='\0';j++)
{
str[i+j]=str2[j];
}
str[i+j]='\0';
//printf("%s\n",str[i+j]);
//原來出錯的地方
printf("%s\n",str);
//改正後的地方
}
運行結果如下圖: