簡體   English   中英

使用strcat時出錯

[英]Error using strcat

在我的學校作業中,我必須找到一個具有蠻力算法的字符串。

例如,如果長度為3,則表示所有可能的組合:abc aa ba ca ab bb cb ac bc cc aaa baa caa aba bba cba aca bca cca aab bab cab abb abb bbb cbb acb bcb ccb aac bac cac abc abc bbc cbc acc密件抄送ccc

我在strcat中遇到問題。

這是代碼。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
# define PASS_SIZE 3


char letters[] = "abc";
char test[] = "acb";
int count = 0;
int nbletters = sizeof(letters)-1;
int bruteForce(int size);

int main() {
    int i = 0;
    int notFound = 1;

    for (i = 1; i <= PASS_SIZE && notFound == 1; i++){
        notFound = bruteForce(i);
    };

    printf("Count: %d\n",count);

    return -1;
}

int bruteForce(int size){
    int i;
    int entry[size];
    char pass[50];
    char *temp;

    for(i=0 ; i<size ; i++){
        entry[i] = 0;
    }
    do {
        for(i=0 ; i<size ; i++){
            temp = letters[entry[i]];
            printf("%c", temp);
            strcat(pass,temp); /*Getting error here*/
       }

        count++;
        printf("\n");

        /*Compare pass with test*/
        if (strcmp (pass,test) == 0){
            return 0;
        };

       for(i=0 ; i<size && ++entry[i] == nbletters; i++){
            entry[i] = 0;
        }

    } while(i<size);

    return 1;
}

蠻力算法可能不是最佳算法。

為什么strcat無法正常工作,而我卻無法進行細分?

您在聲明您的pass變量,但沒有對其進行初始化。 當您強調它的結束時,您首先假設它的結束是它的開始,但是您需要確保情況如此。

更重要的是,請看一下您的temp變量。 您已將其聲明為char * ,但已將其初始化為char (而不是指向char),然后在strcat()再次將其視為指針-但它沒有指向任何地方有效(導致崩潰)。

strcat期望以null結尾的字符串,但是char pass[50]尚未初始化。 設置pass[0] = '\\0'以獲得有效的C字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM