libc 無法訪問null_C中strlen的NULL參數

1. C語言strlen函數參數如果是NULL,則會出錯。

可以參考glibc中strlen的具體實現

通常使用前可以判斷一下參數是否是NULL,或者自己寫一個strlen的實現函數。

2. String Length

You can get the length of a string using the strlen function.

This function is declared in the header file string.h.

Function: size_t strlen (const char *s)

Parameters

s: pointer to the null-terminated byte string to be

examined

Return value

The length of the null-terminated byte

string str

The strlen function returns the length of the string s in

bytes. (In other words, it returns the offset of the terminating

null byte within the array.)

For example,

strlen ("hello, world")

12

3. glibc中strlen的實現在本地的測試

//============================================================================

// Name?: mystrlen.cpp

// Author?:

// Version?:

// Copyright?: Your

copyright notice

// Description : Strlen in C

https://github.com/lattera/glibc/blob/master/string/strlen.c

//============================================================================

#include

#include

#include

using namespace std;

#undef strlen

#ifndef STRLEN

# define STRLEN strlen

#endif

size_t STRLEN(const char *str) {

const char *char_ptr;

const unsigned long int *longword_ptr;

unsigned long int longword, himagic, lomagic;

for (char_ptr = str;

((unsigned long int) char_ptr & (sizeof(longword) - 1)) !=

0;

++char_ptr)

if (*char_ptr == '\0')

return char_ptr - str;

longword_ptr = (unsigned long int *) char_ptr;

himagic = 0x80808080L;

lomagic = 0x01010101L;

if (sizeof(longword) > 4) {

himagic = ((himagic << 16) << 16) | himagic;

lomagic = ((lomagic << 16) << 16) | lomagic;

}

if (sizeof(longword) > 8)

abort();

for (;;) {

//如果傳入的參數是空,此處會訪問崩潰,出錯

//原因:longword_ptr是NULL,則*longword_ptr無法訪問

longword = *longword_ptr++;

if (((longword - lomagic) & ~longword & himagic) != 0)

{

const char *cp = (const char *) (longword_ptr - 1);

if (cp[0] == 0)

return cp - str;

if (cp[1] == 0)

return cp - str + 1;

if (cp[2] == 0)

return cp - str + 2;

if (cp[3] == 0)

return cp - str + 3;

if (sizeof(longword) > 4) {

if (cp[4] == 0)

return cp - str + 4;

if (cp[5] == 0)

return cp - str + 5;

if (cp[6] == 0)

return cp - str + 6;

if (cp[7] == 0)

return cp - str + 7;

}

}

}

}

//測試代碼

int main() {

char *name = NULL;

int a;

a = strlen(name);//傳入的參數如果是NULL

return 0;

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397794.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397794.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397794.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dom對象常用的屬性和方法有哪些?

dom對象常用的屬性和方法有哪些&#xff1f; 一、總結 一句話總結&#xff1a; 1、document屬性和方法&#xff1a;document的屬性有head&#xff0c;body之類&#xff0c;方法有各種獲取element的方法 2、element的屬性和方法&#xff1a;屬性比如style&#xff0c;innerHTML和…

html左中右自適應布局,CSS左中右自適應布局六種方案與原理

css雖簡單,但細節多,技巧性高,易學難精。如何實現左右固定300px , 中間寬度自適應&#xff1f;有如下結構左右中公有樣式, 設置高,設置左右寬度固定300px,左右為紅色&#xff0c;中間為黃色。.item {height: 400px;}.left,.right {width: 300px;background: #f00;}.center {bac…

cacti 忘記密碼的方法

忘記密碼的方法如果是admin 的密碼丟失&#xff0c;id 1&#xff1b;其他用戶以此類推。進入mysqlmysql> show databases; mysql> use cacti;mysql> show tables; mysql> update user_auth set passwordmd5("newpassword") where id1;新的cacti密碼就是…

cr3格式是什么意思_佳能rp的cr3如何打開?修圖為什么要用raw格式?轉碼又是什么?...

佳能rp的cr3如何打開&#xff1f;修圖為什么要用raw格式&#xff1f;轉碼又是什么&#xff1f;這是我個人整理的廣大網友的一些答案&#xff0c;不想浪費大家太多時間就在這里分享給大家希望大家可以快速理解。(搜集的廣大網友的回答&#xff0c;方便大家理解&#xff0c;希望他…

SGU traffic light

占位置。。轉載于:https://www.cnblogs.com/usedrosee/p/4669358.html

計算機基礎應用的培養活動記錄,計算機應用基礎綜合實訓

摘要&#xff1a;《計算機應用基礎綜合實訓(Windows7Office 2010 第3版)》是中等職業教育課程改革國家規劃新教材,根據教育部2009年頒布的"中等職業學校計算機應用基礎教學大綱"中職業模塊的要求編寫,在第2版的基礎上修訂而成,經全國中等職業教育教材審定委員會審定通…

cronschedulebuilder 到時還沒運行完_為什么我的軟件編譯時沒問題,運行時卻出錯?...

首先有件事要和大家說一下&#xff1a;我的公眾號現在可以留言了&#xff01;出于種種不可抗力的原因&#xff08;你們懂的&#xff09;&#xff0c;2018 年 3 月 12 號之后注冊的公眾號將不帶有留言功能&#xff0c;并且前三個月內注冊但并未使用的公眾號的留言功能也會被一并…

Canvas createImageData

createImageData() 方法創建新的空白 ImageData 對象。新對象的默認像素值 transparent black。 對于 ImageData 對象中的每個像素&#xff0c;都存在著四方面的信息&#xff0c;即 RGBA 值&#xff1a; R - 紅色 (0-255)G - 綠色 (0-255)B - 藍色 (0-255)A - alpha 通道 (0-25…

青島計算機類職業中學,青島最好的職業學校有哪些?

青島海洋職業學校是一所由青島市教育局批準&#xff0c;國家承認學歷的重點中等職業學校。學校占地200余畝&#xff0c;建筑面積5萬平方米&#xff0c;在籍學生3975人。學校擁有雄厚的師資力量&#xff0c;以專職教師為主&#xff0c;是一支政治素質好&#xff0c;師德水平高、…

測試1

2018/06/03 測試我的隨筆轉載于:https://www.cnblogs.com/xixirui/p/9129252.html

使用Javascript正則表達式來格式化XML內容

2019獨角獸企業重金招聘Python工程師標準>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head><meta http-equivcontent-type content"text/html; charsetUTF-8"><title>Xml格式化…

mysql vfp_vfp+mysql問題|交流區 - 梅子Visual FoxPro 編程 - Powered by phpwind

感謝樓上,請現場指導,拜謝c_pzwhfiellist""c_pzwhbglist""For i1 To Fcount()-1c_pzwhfiellistc_pzwhfiellistField(i)","c_pzwhbglistc_pzwhbglistField(i)Space(1)"pzwhk."Field(i)","Chr(10)Endforc_pzwhfiellistc_pzwhf…

Nginx 筆記與總結(3)配置虛擬主機

Nginx 重啟的另外一種方式&#xff0c;相當于 kill -HUP cat /usr/local/nginx/logs/nginx.pid&#xff1a; /usr/local/nginx/sbin/nginx -s reload停止 Nginx 的另外一種方式&#xff1a; /usr/local/nginx/sbin/nginx -s stop重讀日志文件的另一種方式&#xff0c;相當于 …

計算機如何查找目標,如何使用命令行查找計算機地理位置? | MOS86

有多種方法可以從IP地址中了解計算機的位置&#xff0c;但如果您決定使用命令行查找信息&#xff0c;那么您如何處理&#xff1f;今天今天的問題Screenshot由Paul Fenwick(Flickr)提供。問題SuperUser閱讀器AlikElzin-kilaka想知道如何找到一臺電腦首先&#xff0c;AlikElzin-k…

Nmap命令的常用實例

一、Nmap簡介 nmap是一個網絡連接端掃描軟件&#xff0c;用來掃描網上電腦開放的網絡連接端。確定哪些服務運行在哪些連接端&#xff0c;并且推斷計算機運行哪個操作系統&#xff08;這是亦稱 fingerprinting&#xff09;。它是網絡管理員必用的軟件之一&#xff0c;以及用以評…

mysql sqlexception_c-很奇怪-mysql的sql :: SQLException未被其類型捕...

我正在使用帶有此(稍微簡化)代碼的mysql c連接器.try{statement->setString(1, word);statement->executeUpdate();}catch( sql::SQLException& e ){// I dont get herereturn sqlerrno_to_error_code( e.getErrorCode() );}catch( std::exception& e ){// I do …

Linux Kernel系列 - 黃牛X內核代碼凝視

Hanks.Wang - 專注于操作系統與移動安全研究。Linux-Kernel/SELinux/SEAndroid/TrustZone/Encription/MDM Mail - byhankswanggmail.com 牛X的內核代碼凝視 大牛的代碼質量高穩定性好&#xff0c;并且邏輯清晰易讀性比較強&#xff0c;今天看到Linux Kernel紅黑樹的代碼時&a…

電子商務計算機網絡安全技術教案,網絡安全技術教案.pdf

名師精編 優秀教案《網絡安全技術》教案2011-2012 第 2 學期適用班級&#xff1a; 2010 級計算機網絡技術專業編寫&#xff1a;徐英武名師精編 優秀教案第 1~2 課時周次 &#xff11; 日期 2012 年 02 月 14 日 授課班級 2010 級計算機網絡技術課題 網絡安全概述 課 型 理論課教…

技術文章匯總

點擊以下鏈接&#xff0c;可以查看相關技術文章&#xff1a;包括APP軟件開發、手機軟件開發、嵌入式開發、Java和C/C編程&#xff0c;同時涉及原型設計、效果圖設計、切圖、網絡、多媒體、加密、字符編碼、通信原理、測試和項目管理等各方面的知識。APP開發實戰手機開發實戰技術…

咋樣查mysql的url_eclipse用jdbc連接mysql數據庫時,url是填什么?怎樣找出地址?

展開全部 jdbc連接mysql數據62616964757a686964616fe78988e69d8331333337623535庫的url為: jdbc:mysql://主機名或IP抵制:端口號/數據庫名?useUnicode=true&characterEncoding=UTF-8 jdbc連接其他數據庫的連接字符串寫法為:1、Oracle8/8i/9i數據庫(thin模式) Class.for…