字串的操作時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編譯器不會對陣列...