使用c中的strcpy函数进行分段错误(核心转储)

时间:2017-11-15 10:13:20

标签: c algorithm strcpy

我正在尝试编写一个函数,它将读取两个字符串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;
    }

提前致谢!

1 个答案:

答案 0 :(得分:2)

分段违规发生在这一行:

    usedString[lentemp - index - 1] = 0;

在这里,你试图从最后找到索引,但你的strlstchar从头开始返回索引,尽管它从头开始搜索。并且你想要在找到的字符处截断字符串。

将此行替换为:

    usedString[index] = 0;

然后你得到了想要的输出。