由strcat函數引發的對char *a和char a[]以及sizeof和strlen

/*

  • ?http://www.cnblogs.com/kaituorensheng/archive/2012/10/23/2736069.html
  • 參考這篇文章

*? char *a = "Hello";Hello存放在常量區,是無法修改的。

*?通過指針只可以訪問字符串常量,而不可以去改變它

*?

*?

*? char a[] = "Hello";而數組存放在棧中,是可以修改的

*? Hello存放在棧中,可以通過指針去訪問和修改數組內容

*

sizeofstrlen兩個函數的隨想:

sizeof的參數是數組,返回的是編譯時分配的數組空間?sizeof是運算符,值在編譯時已計算好)

strlen的參數是字符型指針(char *),當數組名作為參數傳入時,實際上數組就退化為指針了。

strlen是函數,值需要在運行時才能得出)

該函數的實際功能從代表字符串的第一個地址開始遍歷,知道遇到結束符'\0',返回長度不包括'\0'

?

這也就說明下面的函數為什么會將數組越界的字符串也一起顯示了,strlen的限制就只是'\0',而

且數組傳入后即退化為指針,指針只是在讀這些地址的值,沒有修改,所以也不“違法”。

?

總的來說就是,數組可以越界,編譯器也不會報警,至于越界使用的地址會造成什么,誰也不知道

?

char *a= "Hello, ";
char b[]= "World!";strcat(b, a);     //  這樣是可行的,但是將b和a互換位置后,將導致段錯誤a是常量,不可被更改printf("%s",b);*/
#include<stdio.h>
#include<string.h>voidstrcat(char a[], char b[]);
intstrlen(char *s);intmain()
{
int i = 0;
char a[] = "Hello, ";
char b[] = "World!";strcat(a, b);printf("%d\n", strlen(a));
printf("%d\n", sizeof(a));printf("%s", a);
return 0;
}voidstrcat(char a[], char b[])
{
int i = 0, j = 0;while(a[i] != '\0')
i++;while( (a[i++] = b[j++]) != '\0' );
}intstrlen(char *s)
{
char *p = s;while(*p != '\0')
p++;return p-s;
}


轉載于:https://www.cnblogs.com/yuyounglife/p/5661168.html

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

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

相關文章

for(;;)函數中判斷條件執行順序

for(i100;i>0&#xff1b;--i) { cout<<"i"<<i<<endl; } 它的執行過程如下&#xff1a; 1) 先求解表達式1。 2) 求解表達式2&#xff0c;若其值為真&#xff08;非0&#xff09;&#xff0c;則執行for語句中指定的內嵌語句&…

學習筆記(21):Python網絡編程并發編程-隊列的使用

立即學習:https://edu.csdn.net/course/play/24458/296433?utm_sourceblogtoedu 隊列和管道 1.存在的意義&#xff1a; 1&#xff09;在前面的筆記中&#xff0c;使用join和互斥鎖來保證了硬盤數據共享的數據安全性&#xff0c;但是降低了代碼的運行效率&#xff1b; 2&#x…

dbms_xplan之display_cursor函數的使用

文章來源&#xff1a;http://blog.csdn.net/leshami/article/details/6866925 DBMS_XPLAN包中display_cursor函數不同于display函數&#xff0c;display_cursor用于顯示SQL語句的真實的執行計劃&#xff0c;在大多數情況下&#xff0c;顯示真實 的執行計劃有助于更好的分析SQL語…

H5+JS實現《Just Do 8》游戲源碼分享

【界面效果圖】 【代碼結構】 【代碼結構解釋】 1、使用html語言實現數據 2、使用css3語言實現樣式 3、使用JS語言實現路基控制 【注意是想】 1、如需查看效果&#xff0c;請使用手機瀏覽器&#xff0c;或者使用appcan打包查看 2、如果使用瀏覽器&#xff0c;請選擇google的Chr…

windows下的結束標志

空格 ctrlz ctrlz 回車 int main() { stack<string> ss; //std::vector<int> ss; string str; cout<<"請輸入字符串"<<endl; while(cin>>str) { ss.push(str); //if(str[0]1) …

前端架構知識體系

0. 前端自動化(Workflow) 前端構建工具 Yeoman – a set of tools for automating development workflowgulp – The streaming build systemgrunt – the JavaScript Task RunnerF.I.S – 前端集成解決方案webpackNPM前端模塊管理器 Bower – A package manager for the webBr…

python數據結構_大O符號_學習筆記(1)

1.概念 &#xff1a;大O符號是用來表達一個算法的復雜程度的&#xff0c;是一個數量級 2.代碼 a 1 b 2 c 3 for i in range(n):for j in range(n):x i*iy j*jz i*jfor k in range(n):m a*k 5v k*kd 100*c e c*d3.分析 在上述代碼中&#xff0c;分配操作數分為四…

.NET簡談組件程序設計之(上下文與同步域)

我們繼續學習.NET多線程技術&#xff0c;這篇文章的內容可能有點復雜。在打破常理之后&#xff0c;換一種新的思考模型最為頭疼。這篇文章里面會涉及到一些不太常見的概念&#xff0c;比如&#xff1a;上下文、同步域等等。我也是最近才接觸這些關于組件編程方面的高深技術&…

string類的各種函數用法

標準c中string類函數介紹 注意不是CString 之所以拋棄char*的字符串而選用C標準程序庫中的string類&#xff0c;是因為他和前者比較起來&#xff0c;不必 擔心內存是否足夠、字符串長度等等&#xff0c;而且作為一個類出現&#xff0c;他集成的操作函數足以完成我們大多數情況…

調用圖片按鈕的img圖片

今天是我學前端的第12天。早上起床后活動筋骨時看了《JS的基本屬性操作》&#xff0c;作業是模擬手機發送短信。文字都能傳輸到<div>上&#xff0c;就是圖片不知道怎么傳。折騰了好久才弄清楚&#xff0c;多虧了某群的小伙伴們。 這一節課&#xff0c;我學會了如何調用圖…

利用api接口來實現web網頁登陸

因為公司的所有鏈接數據庫的都是用的api接口 最近做了一個用api接口登陸 function Login() { if (!Validate()) { return false; } var para {}; para.action "login_by_api"; para.login_name $.trim($("#txtLoginName").val()); para.password $.tr…

Cisco設備做流量監控的方法

方法一&#xff1a;HUB&#xff08;方法太簡單。。。略&#xff09;方法二&#xff1a;TAP&#xff08;太專業了。。還要另外投資&#xff09;方法三&#xff1a;SPAN&#xff08;就是大家常說得Port Mirror或者Port Monitor&#xff09;1。Cat2900XL/3500XL2900XL(config)#int…

python數據結構_(列表)大O性能_學習筆記(2)

1.列表 1&#xff09;一般列表操作命令的復雜度&#xff08;準確來說是函數的復雜度&#xff09; 2&#xff09;時間計算&#xff08;timeit模塊和Timer對象&#xff09; 要捕獲我們的每個函數執行所需的時間&#xff0c;我們將使用 Python 的 timeit 模塊。timeit 模塊旨在 …

學習C++不要糾結了

阿里&#xff0c;騰訊2家公司均工作過。處理高并發的底層基本都是使用C來完成的&#xff0c;騰訊確實90%的程序員都是C程序員&#xff0c;而且基本每個C程序員都有2本磚頭書---unix 環境高級編程 和 C Primer。 阿里大部分程序員都是JAVA程序員&#xff0c;但在關鍵的節點還是會…

找到你的位置(JS在頁面中的位置)最常用的方式是在頁面中head部分放置script元素,瀏覽器解析head部分就會執行這個代碼,然后才解析頁面的其余部分...

找到你的位置&#xff08;JS在頁面中的位置&#xff09; 我們可以將JavaScript代碼放在html文件中任何位置&#xff0c;但是我們一般放在網頁的head或者body部分。放在<head>部分 最常用的方式是在頁面中head部分放置<script>元素&#xff0c;瀏覽器解析head部分就…

國內主流.NET CMS系統整理

現在只要想做一個網站&#xff0c;馬上就想到去下載一個cms來改&#xff0c;方便&#xff0c;快速&#xff0c;現如今在網上隨便搜索下CMS都出現幾十個不一樣的品牌&#xff0c;有php的、java的、.net的&#xff0c;功能上也是各有千秋&#xff0c;如何選擇一個比較適合自己的C…

數據庫的事務級別介紹與操作

關系型數據庫都具有一套事務級別&#xff0c;以前的開發和學習過程我很少關注過這個概念&#xff0c;今天搜集了一些資料&#xff0c;在 結合spring聲明式事務學習的同時&#xff0c;總結一下數據庫的事務級別與操作。 READ-UNCOMMITTED: 未提交讀 會出現臟讀、不可重復讀、幻讀…

中國做圖像處理的公司

&#xff08;1&#xff09; 北京北方獵波科技有限公司&#xff1a;http://www.northwh.com/beifangliebo/main1.html 紅外探測成像產品 &#xff08;2&#xff09; 深圳超多維光電子有限公司北京分公司&#xff1a;http://www.superd.com.cn 立體顯示設備 &#xff08;3&…

[ilink32 Error] Error: Unresolved external 'SendARP'

[ilink32 Error] Error: Unresolved external SendARP referenced from E:\APPOBJ\KSRGETMAC.OBJ #pragma link "iphlpapi.lib" 轉載于:https://www.cnblogs.com/cb168/p/5573478.html