如何解决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。
知道的请帮忙解决
您遇到了段错误,因为指定的所需参数的数量做得不好。主要问题在这里:
if (argc == 2)
用户传递的实际个参数的数量等于所需参数的数量减去11。应该是:
int main(int argc, char *argv[]) {
if (argc != 3) {
// Number of arguments are either greater or lesser than 3
// Handle the error
}
// Ok...
}
您现在可以安全地使用参数了。
1.程序的调用命令,例如./a.out
也算作参数(argv[0]
)。
如果您调用您的程序:
./substitution abcdefghijklmnopqrstuvwxyz
argc
将是 2,而 argv
将是一个包含 3 个指针的数组:
argv[0]
指向字符串./substitution
,argv[1]
指向字符串abcdefghijklmnopqrstuvwxyz
,argv[2]
为NULL。如果您试图通过调用 strlen(argv[2])
来计算 NULL 的长度,那将是一个错误。您不得将 NULL 传递给 strlen
。我认为您的错误只是错误地索引了 argv 数组。 C 中的数组是从零开始的。如果你想计算第一个参数的长度,你想使用 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;
}
当我制作我的程序时,我得到了一个名为 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。
知道的请帮忙解决
您遇到了段错误,因为指定的所需参数的数量做得不好。主要问题在这里:
if (argc == 2)
用户传递的实际个参数的数量等于所需参数的数量减去11。应该是:
int main(int argc, char *argv[]) {
if (argc != 3) {
// Number of arguments are either greater or lesser than 3
// Handle the error
}
// Ok...
}
您现在可以安全地使用参数了。
1.程序的调用命令,例如./a.out
也算作参数(argv[0]
)。
如果您调用您的程序:
./substitution abcdefghijklmnopqrstuvwxyz
argc
将是 2,而 argv
将是一个包含 3 个指针的数组:
argv[0]
指向字符串./substitution
,argv[1]
指向字符串abcdefghijklmnopqrstuvwxyz
,argv[2]
为NULL。如果您试图通过调用 strlen(argv[2])
来计算 NULL 的长度,那将是一个错误。您不得将 NULL 传递给 strlen
。我认为您的错误只是错误地索引了 argv 数组。 C 中的数组是从零开始的。如果你想计算第一个参数的长度,你想使用 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;
}