下面的代码中的“NULL;”是什么意思?

#include <assert.h>
#include <stdio.h>
char*strcpy(char*strDest, constchar*strSrc)
{
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
char* address = strDest;   // 2分
while( (*strDest++=*strSrc++) !='\0' )       // 2分
NULL;
return address ;    // 2分
}

NULL表示空指针,题中表示具有保留的值。

NULL是在计算中具有保留的值,用于指示指针不引用有效对象。程序通常使用空指针来表示条件,例如未知长度列表的结尾或未执行某些操作; 这种空指针的使用可以与可空类型和选项类型中的Nothing值进行比较。

空指针不应与未初始化的指针混淆:保证空指针与指向有效对象的任何指针进行比较。但是,根据语言和实现,未初始化的指针可能没有任何此类保证。它可能与其他有效指针相等; 或者它可能比较等于空指针。它可能在不同的时间做两件事。

扩展资料:

空字符通常表示为源代码字符串字符或字符常量中的转义序列。在许多语言,这不是一个单独的转义序列,而是八进制转义序列,单个八进制数字为0。

因此,‘\0’不能跟随任何数字0通过7;否则它被解释为更长的八进制转义序列的开始。被在使用中发现各种语言的其他转义序列\000,\x00,\z,或的Unicode表示\u0000。

表示空字符的能力并不总是意味着生成的字符串将被正确解释,因为许多程序将认为null作为字符串的结尾。因此,键入它的能力(在未经检查的用户输入的情况下)会创建一个称为空字节注入的漏洞,并可能导致安全漏洞。

空字符以逗号表示是^@。在Windows上,可以通过按住Ctrl键,然后按@(这通常需要同时按下⇧ Shift并按下数字2键)。

在文档中的空字符有时表示为单EM含有字母“NUL” -width符号。在Unicode中,有一个具有相应字符的字符,用于空字符的可视表示,“null”符号,U + 2400(␀),但不要与实际的空字符U + 0000混淆。

参考资料来源:百度百科—Null

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2019-10-20

NULL表示空指针,题中表示具有保留的值。

NULL是在计算中具有保留的值,用于指示指针不引用有效对象。程序通常使用空指针来表示条件,例如未知长度列表的结尾或未执行某些操作; 这种空指针的使用可以与可空类型和选项类型中的Nothing值进行比较。

空指针不应与未初始化的指针混淆:保证空指针与指向有效对象的任何指针进行比较。但是,根据语言和实现,未初始化的指针可能没有任何此类保证。它可能与其他有效指针相等; 或者它可能比较等于空指针。它可能在不同的时间做两件事。

扩展资料

函数null用来求解零空间,即满足方程组A*X=0的解空间。实际上是求出解空间的一组解(基础解系)。

语法:z=null(A) %z的列向量为方程组的正交规范基,满足z‘ x z=I。

z=null(A,'r') %z的列向量是方程A*X=0的有理基。

java中的null是一个关键字,通常用来声明一个空引用,Object o = null;

表示对象o是一个空引用,如果程序员对它进行了引用,就会抛出一个NullPointerException异常。

参考资料:百度百科 Null (空指针)

本回答被网友采纳
第2个回答  推荐于2019-09-23

null
null 值指出一个变量中没有包含有效的数据。

产生 null 的原因是: 

对一个变量显式地赋值为 null。 

包含 null 的表达式之间的任何操作。

在C或C++语言中,NULL指针是一个无类型指针,并且值为0。

它和void*(无类型指针)是有区别的,两者都是无类型,但void*有地址值,如
int i = 0;

void* p = (void*)&i; //后面(void*)表示将int*强制转换为void*,如果不写,编译器也会帮我们暗中完成。

int* p2 = &i;

上面三行语句表明p是一个无类型指针,并且其值等于变量i的内存地址。p2则为一个有类型的指针,其指向一个整型变量i。

而NULL指针在此处也可以举一例说明, 如 int *p = NULL;

表示p指针值为0(NULL,,记住在C和C++中,一般NULL和0通用),不指向任何可访问的内存地址。

试图访问这个不存在的0地址,一般会导致程序错误。如后面若书写 *p = 3;

程序运行时将报错,无法将3赋值给一个不存在的内存位置。

assert是一个宏,其作用是断言某语句为真。如你上面的代码assert((strDest!=NULL) && (strSrc !=NULL)); 

表示,strDest和strSrc 都不为空时,这个断言将成立,程序将继续运行至下一行char* address = strDest;  若strDest或strSrc中有任何一个等于0(即NULL),则断言不成立。

程序将在此处结束,并将会在终端(电脑屏幕)提示你断言的地方出问题了。
之所以要判断这两个字符串指针(char*类型),正是因为下面while中有到*strDest++=*strSrc++,

星号(*)作用是取指针值所指向的内存中的值,意味着访问这块内存,如果上面没有断言,而此处strDest或strSrc值恰好又为NULL(即0),将出现访问空地址,程序会出错。

此处相当于写作 0;  没有任何实际作用,也可以直接用 一个分号 “;”

从上面strcpy可以看到,这是一个拷贝字符串函数,目的是将strSrc指向的字符串拷贝到strDest指向的内存中。

while的循环条件就完成了这一拷贝操作,所以while体里面不做任何操作,就用了NULL; 语句, 我一般习惯只写一个分号“;",也是表示不做任何操作。如果在里面什么都不写,就属于语法错误。编译会报错,你可以试试。

本回答被网友采纳
第3个回答  推荐于2019-10-15

代码中的“NULL”是指“空的”的意思;元素只有“零”的意思。计算机中通常表示空值,无结果,或是空集合。在ASCII码的第一个字符是NULL,它的数值是0,占用1字节;C语言把它作为字符串的最后一个字符,以表示字符串到此结束"\0"。

NULL指针是一个无类型指针,并且值为0。一个指针,拥有2个属性--地址值和指针类型。两者的作用是:

1、地址值标识变量的首地址(32位系统下指针的地址值占4字节);

2、指针类型告诉编译器,应该怎样进行接下来的数据访问(int型数组和float型数组是不同的;数组访问与结构体访问也是不同的)。

NULL的出现是一种约定俗成,事实上它不是C语言中的关键字。把一个指针赋值为NULL,通常的说法是“将指针悬空”。这样指针就无法再进行任何数据访问了。编程工作中有一类比较容易犯的错误--指针地址未进行正确的更新赋值就加以使用,这往往会造成很严重的后果(对内存区进行错误的涂抹)。

所以一个良好的习惯是,当一个指针的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。

拓展资料:

Null pointer 或是 null reference。这样的指标称之为 null pointer。有许多实作上是以0 (all bits zero) 代表null pointer,多数的CPU以此作为内存空间的底[虽有些系统会使用有记号位址空间(signed address space)],并允许为负值a。许多操作系统会造成例外事件,一旦用null来存取其记亿体。

一些语言使用其他的 nomenclature 来表示这种指标,像是,Pascal, Ruby 以及 Lua 则使用 nil,当Visual Basic 使用 Nothing。Fortran不支援此一常数,但其属性(property)可被设定成 NULLIFY 并由 ASSOCIATED 函数测试。

在许多定义里,null 可以是 three-valued logic, with null 意指 "no value" 或是 "unknown value"。SQL数据库查询语言使用 null 在这种地方上,如同在Visual Basic 及其衍生语言。于此模型上, null operand 等同于 null (VB) or "unknown" (SQL). 故对于A而言, 算式 "A == null" 与 "A <> null" 既非 true 亦非 false。

然而,布林运算 "A and false" 产生 false,且类似 "A or true" 是真 true,甚至当 A 是 null,因为这个算式并非代表在 A的值域之上。另一算式 "A is null" 和 "A is not null" 都是正确的方法,皆可用来测试 SQL 中的null value,一些 SQL 可实作为 A == null 可以是 "true" ,如果 A 是 null; 详见 Null (SQL)。

Null 百度百科

本回答被网友采纳
第4个回答  2014-09-25
空指针,没有指向任何地址追问

我问的是while循环中的NULL;
while( (*strDest++=*strSrc++) !='\0' )       // 2分
NULL;

追答

不处理直接写分号就行

相似回答