[英]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]
指向字符串./substitution
, argv[1]
指向字符串abcdefghijklmnopqrstuvwxyz
, argv[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.