C語言 字串常見問題總結

2021-07-02 01:59:26 字數 1275 閱讀 6312

字串的操作時c中非常常見的,但是稍不注意就會出現錯誤,而且這種錯誤往往時執行時才會崩潰(段錯誤),讓你的程式很難除錯。下面就說說常見的幾種錯誤

1.為字串指標賦值,後修改

char q[10] = ;

strcat(p,q);

賦值給了但是

q[0] = 'g';

strcat(p,q);

int i1=sizeof(q);

int i2=sizeof(p);

printf("%d\n",i1);

printf("%d\n",i2);

sizeof(q)就是10,也就是說在棧中分配了記憶體,並儲存相應內容。所以就可以更改字串陣列中的內容,因為這時更改的是棧中的內容。

2.strcpy和memcpy操作

這兩個函式是非常常用的函式,具體功能就不介紹了,看看錯誤會是哪些

char *p;

char *s = "asdasd";

strcpy(p,s);

這時執行程式就會段錯誤,為什麼呢,之前我一直以為是因為s是字串常量,而看看strcpy的原始碼

char* strcpy(char* des,const char* source)

你會不會以為是因為source++改變了字串常量,所以導致了段錯誤?

其實這個錯誤很簡單,strcpy的原始碼並沒有更改s字串,看這裡,引數型別:

const char* source

也就是說strcpy並不會改變source變數!

原因出在p沒有分配記憶體。。是不是知道真相眼淚掉下來?

另外在使用memcpy的時候注意新增『\0』

3.strcat

strcat沒有什麼值得注意的,主要是strcat並不需要新增『\0』,看原始碼

//將源字串加const,表明其為輸入引數

char* strcat(char* strdest , const char*s trsrc)

while(*strdest++=*strsrc++)

//此處可以加語句*strdest=』\0』;無必要

return address;//為了實現鏈式操作,將目的位址返回

}

在while最後會賦值

『\0』,所以不需要手動在新增~

關於字串的知識還是很多的,暫時遇到這些,再結合棧的知識理解之。

以後遇到再加吧~

C語言常見問題 return返回字串

想 c語言函式 返回 字串 資料。include include include char test strcpy str,abc printf s11 n n str return str int main strcpy str1,test printf s22 n n str1 return0 ...

C 常見問題 字串分割

在一些程式設計練習中,經常會對字串進行處理,往往處理之前都會對字串進行分割來提取各部分資訊。在c 中雖然沒有像python那樣提供split這樣直接的字串分割函式,但也有一些其他的方法能夠對其進行分割,下面介紹幾種c 中常用的字串分割方法。substr 函式 vectorsplit const st...

C語言常見問題總結

1.用 注釋 在c語言中不是好辦法,尤其是在注釋的 中原先已經有注釋存在,可能會報錯,更好的辦法是用 if 和 endif 2.如果有一些宣告需要用於幾個不同的原始檔,可以在乙個單獨的檔案編寫這些宣告,然後用 include命令把這個檔案包含到需要使用這些宣告的原始檔中 3.標準的c編譯器不會對陣列...