我正在尝试编写一个函数,它将读取两个字符串stringArray[MAX]="ABADDFDEFBFCCHCGGEHJJI"
和popArr[MAX]="ABCDEFGHIJ"
并生成如下输出:
A
B-F-D-A
C-F-D-A
D-A
E-G-C-F-D-A
F-D-A
G-C-F-D-A
H-C-F-D-A
I-J-H-C-F-D-A
J-H-C-F-D-A
但是我收到Segmentation fault (core dumped)
错误。为什么?这是我的代码:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
size_t strlstchar(const char *str, const char ch)
{
char *chptr = strrchr(str, ch);
return chptr - str;
}
int main(){
// Input strings
char stringArray[MAX]="ABADDFDEFBFCCHCGGEHJJI";
char popArr[MAX]="ABCDEFGHIJ";
int index=2, lenpop, lentemp;
char usedString[MAX]="";
char tempChar;
lenpop = strlen(popArr);
printf("%c\n", stringArray[0]);
for(int i=1;i<lenpop;i++){
strcpy(usedString, stringArray);
printf("%c", popArr[i]);
tempChar = popArr[i];
while(tempChar!=stringArray[0]){
while(index%2==0){
index = strlstchar(usedString, tempChar);
lentemp = strlen(usedString);
usedString[lentemp-index-1]=0;
}
printf("-%c", usedString[index-1]);
tempChar=usedString[index-1];
index=2;
}
printf("\n");
}
return 0;
}
提前致谢!
答案 0 :(得分:2)
分段违规发生在这一行:
usedString[lentemp - index - 1] = 0;
在这里,你试图从最后找到索引,但你的strlstchar
从头开始返回索引,尽管它从头开始搜索。并且你想要在找到的字符处截断字符串。
将此行替换为:
usedString[index] = 0;
然后你得到了想要的输出。