strcmp возвращает __strcmp_sse2_unaligned () в простой программе поиска строк - PullRequest
0 голосов
/ 06 августа 2020

Я сейчас борюсь с примитивной программой поиска. Он использует strcmp для сравнения заданной строки с массивом из двух тусклых строк. ВВП возвращает:

"__ strcmp_sse2_unaligned () в ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:30 30 ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned .S: Нет такого файла или каталога ".

Отредактировано: Пытаясь двигаться дальше, добавлена ​​командная строка для процедуры ввода строки. Как-то ошибается.

вот мой код

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char dictionary()
{
   
    char **strings = (char**)malloc(5*sizeof(char*));
    int i = 0;

    for(i = 0; i < 5; i++){
        //printf("%d\n", i);
        strings[i] = (char*)malloc(7*sizeof(char));
    }

    sprintf(strings[0], "mark");
    sprintf(strings[1], "ala");
    sprintf(strings[2], "wojtek");
    sprintf(strings[3], "tom");
    sprintf(strings[4], "john");
   
    for(i = 0; i < 5; i++){
        printf("Line #%d(length: %lu): %s\n", i, strlen(strings[i]),strings[i]);
    } 

    for(i = 0; i < 5; i++){
        free(strings[i]);
    }

    free(strings);
}

int cmp(char *s1, char *s2[][10]){
    int i = 0;
    //size_t l = strlen(s1);
    
    for (i = 0; i < 5; i++){
            
            if (strcmp(s1, s2[i][7*sizeof(char)]) == 0)
            
            {
            
                printf("OK \n");
                            
                } else {
        
    printf("sth is wrong \n");  
            }
return 0;
    }
}

int main(){

    char BufText[255];
    int n=0;
    char sign;
    fflush(stdin);
    n = 0;
    do {
        sign = getchar();
        BufText[n ++] = sign;
        if(n >= 253) break;
    } while (sign !='\n');
    BufText [n] = 0;
    char **dict = dictionary();
    cmp(BufText, dict);
    free_dictionary(dict);
return 0;
}                                                                                                                                    

1 Ответ

1 голос
/ 06 августа 2020

Как сказано в комментариях, в вашем коде много fl aws.

Сначала в основном вы пытаетесь cmp("ala", dictionary);, но dictionary является необъявленной переменной. Я думаю, вы хотели использовать результат вашего вызова dictionary() в вызове cmp. Поэтому вам нужно сохранить результат dictionary() в вашей переменной dictionary. На самом деле это невозможно, потому что ваш dictionary() fun c ничего не возвращает и освобождает выделенный dict, прежде чем его можно будет использовать.

Я мог бы продолжить так, но вот исправленная версия вашего кода . Не стесняйтесь обращаться за разъяснениями.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char **dictionary()
{

    char **dict = (char**)malloc(sizeof(char*) * 5);
    int i = 0;

    for (i = 0; i < 5; i++)
        dict[i] = (char*)malloc(sizeof(char) * 7);

    sprintf(dict[0], "mark");
    sprintf(dict[1], "ala");
    sprintf(dict[2], "wojtek");
    sprintf(dict[3], "tom");
    sprintf(dict[4], "john");

    for (i = 0; i < 5; i++)
        printf("Line #%d(length: %lu): %s\n", i, strlen(dict[i]),dict[i]);

    return (dict);
}

void free_dictionary(char **dict)
{
    for (int i = 0; i < 5; i++)
        free(dict[i]);
    free(dict);
}

void cmp(char *s1, char *s2[5])
{
    int i = 0;

    for (i = 0; i < 5; i++)
    {
        if (strcmp(s1, s2[i]) == 0)
            printf("OK \n");
        else
            printf("sth is wrong \n");
    }
}

int main()
{
    char **dict = dictionary();

    cmp("ala", dict);
    free_dictionary(dict);

    return (0);
}
...