Моя программа должна печатать каждый n-й символ в строке текста. Первый параметр определяет «n» или приращение между символами для отчета. Второй параметр является необязательным, но если указано, определяет, на сколько символов работать.Segfault при передаче большого параметра
#include <stdio.h>
#include <stdlib.h>
#define MAX_STR_LEN 100
int main(int argc, char **argv) {
char string[MAX_STR_LEN];
char *testval="This is a test, this is only a test. For the next sixty seconds, this will be a test of the emergency broadcasting system.";
if (argc<2) {
printf("Expected at least one argument.\n");
return 1;
}
int inc=atoi(argv[1]);
if (inc <=0) {
printf("Expected first argument to be a positive number.\n");
return 1;
}
int max=MAX_STR_LEN;
if (argc==3) {
max=atoi(argv[2]);
if (max<0) max=MAX_STR_LEN;
}
int i=0;
while(i < max) {
string[i]=testval[i]; // gdb says this is where the seg fault occurs
i++;
}
string[i]=0;
i=0;
while(string[i]!=0) {
printf("The %d char is %c\n",i,string[i]);
i = i + inc;
}
return 0;
}
Запуск "./prog3-40" отлично работает, но работает" ./prog3 5 150" вызывает ошибку сегм.
./prog3 5 150
8
Segmentation Fault
В чем Ваш вопрос? –
Вы не можете скопировать строки с помощью оператора =. Вместо этого используйте strcpy(). – Abend
Когда вы предоставляете 150 в качестве длины, вы пытаетесь получить доступ к данным за пределами границ, так что вам повезло, что вы получили крах, чтобы сказать, что делаете это неправильно. Если второй аргумент равен или больше MAX_STR_LEN, у вас есть проблемы; у вас также есть проблемы, если они длиннее, чем 'strlen (testval)'. И 150 длиннее обоих. –