簡體   English   中英

如何解決 c 中的分段錯誤?

[英]How to solve segmentation fault in c?

當我在編寫程序時,我遇到了一種叫做Segmentation Fault的錯誤類型。

#include <cs50.h>
#include <string.h>
#include <stdio.h>

int main(int argc, string argv[])
{
    char i = strlen(argv[2]);
    if (argc == 2)
    {
        printf("%i %s %hhd", argc, argv[2], i);
    }
}

我使用這些命令運行這個程序

make substitution

接着

./substitution abcdefghijklmnopqrstuvwxyz

在此我們必須添加一個 26 字的鍵,在上面的行中是 a 到 z。

知道解決的請幫忙

如果你調用你的程序:

./substitution abcdefghijklmnopqrstuvwxyz

argc將是 2,而argv將是一個包含 3 個指針的數組:

argv[0]指向字符串./substitutionargv[1]指向字符串abcdefghijklmnopqrstuvwxyzargv[2]是 NULL。 如果您嘗試通過調用strlen(argv[2])來計算 NULL 的長度,則會出現錯誤。 您不得將 NULL 傳遞給strlen 我認為您的錯誤只是錯誤地索引了 argv 數組。 C 中的 Arrays 從零開始。 如果要計算第一個參數的長度,則要使用argv[1]而不是argv[2]

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
    int rc = EXIT_FAILURE;
    if( argc > 1 ){
        size_t i = strlen(argv[1]);
        printf("%i %s %zd\n", argc, argv[1], i);
        rc = EXIT_SUCCESS;
    }
    return rc;
}

您遇到了段錯誤,因為指定的所需 arguments 的數量做得不好。 主要問題在這里:

if (argc == 2)

用戶實際傳遞的 arguments 的數量等於所需的 arguments 的數量減去 1 1 它應該是:

int main(int argc, char *argv[]) {
  if (argc != 3) {
    // Number of arguments are either greater or lesser than 3
    // Handle the error
  }

  // Ok...
}

您現在可以安全地使用 arguments。


1. 程序的調用命令,例如./a.out也算作參數( argv[0] )。

暫無
暫無

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

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