strcmpreturns__strcmp_sse2_unaligned()中一个简单的字符串搜索程序

strcmp returns __strcmp_sse2_unaligned () in a simple string search programme

我目前正在与原始搜索例程作斗争。它使用 strcmp 将给定的字符串与两个暗淡的字符串数组进行比较。 国内生产总值 returns:

"__strcmp_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S:30 30 ../sysdeps/x86_64/multiarch/strcmp-sse2-unaligned.S: No such file or directory".

已编辑:尝试继续,为字符串输入过程添加了命令行。不知何故,它是错误的。

这是我的代码

#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;
}                                                                                                                                    

正如评论中所说,您的代码中存在很多缺陷。

首先在您的主体中,您试图 cmp("ala", dictionary);dictionary 是一个未声明的变量。我认为您想将 dictionary() 调用的结果用于 cmp 调用。因此,您需要将 dictionary() 结果存储到 dictionary 变量中。它实际上无法完成,因为你的 dictionary() func 没有 return 任何东西并在分配的字典可以使用之前释放它。

我可以继续这种方式,但这是您的代码的修补版本。随时要求澄清。

#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);
}