0
我的程序應該打印出一串文本中的每第n個字符。第一個參數定義要報告的字符之間的「n」或增量。第二個參數是可選的,但如果指定,則定義要處理的字符數。通過大參數時發生段錯誤
#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 5 40」正常,但運行「./prog3 5 150」會導致seg故障。
./prog3 5 150
8
Segmentation Fault
你的問題是? –
你不能用=運算符複製字符串。使用strcpy()代替。 – Abend
當你提供150作爲長度時,你試圖訪問數據越界,所以你很幸運,你會崩潰告訴你做錯了。如果第二個參數等於或大於MAX_STR_LEN,則會出現問題;如果它長於'strlen(testval)',你也會遇到問題。 150比兩者都長。 –