簡體   English   中英

查找字符串長度時出現分段錯誤

[英]Segmentation fault when finding string length

計算字符串長度的函數; 我認為這里的邏輯是正確的:

int strlength(char *s)
{
 int count=0;   
 while(*s!='\0')
 {
    count++;
    s++;
 }
  return count;
}


int main(void) {
    char *s;
    int length;
    printf("enter your string ");
    scanf("%s",s);  
    length = strlength(s);
    printf("string length:%d",length);
    return 0;
}

我在這里正確輸入字符串並進行分配嗎? 誰能解釋為什么我在這里出現細分錯誤?

s必須指出某事。 這是分配128個字節的示例:

s = malloc(128);

完成后,請確保釋放內存:

free(s);

請注意,您必須限制可以從用戶讀取的數量。

scanf("%127s", s);

我為NUL終止符留了一個額外的字節。

main()函數的第二行聲明一個指針。 但是,該指針永遠不會初始化為指向程序擁有的某個內存塊。

建議使用堆分配功能之一(malloc,calloc,realloc)初始化該指針。

使用該未初始化的指針是未定義的行為,並且(如您所見)會導致seg故障事件。

調用任何scanf()系列函數時,

  1. 始終檢查返回的值(而不是參數值)以確保操作成功。
  2. 當使用'%s'輸入/格式說明符時,請始終包括一個MAX CHARACTERS修飾符,該修飾符比輸入緩沖區的長度小1,以避免緩沖區溢出。 這種溢出是未定義的行為,並且可能導致段故障事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM