标签: strcmp

在linux上实现汇编64中的strcmp函数

我正在尝试实现strcmp,它是C程序集 64 中的一个函数,这是迄今为止我的工作代码:

global ft_strcmp

section .text

ft_strcmp:              ;rax ft_strcmp(rdi, rsi)
        mov     r12, 0  
loop:
        mov r13b, [rdi + r12]
        cmp byte [rdi + r12], 0
        jz exit
        cmp byte [rsi + r12], 0
        jz exit
        cmp r13b, byte [rsi + r12]
        jnz  exit
        inc r12
        jmp loop

exit:
        sub r13b, [rsi + r12]
        movsx rax, r13b
        ret 
Run Code Online (Sandbox Code Playgroud)

当我尝试用这个编译它时main.c

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

int     ft_strcmp(const char *str1, const char *str2);

int     main()
{
        const …
Run Code Online (Sandbox Code Playgroud)

c linux assembly nasm strcmp

2
推荐指数
1
解决办法
729
查看次数

救命!当喂食strtok结果时,strcmp对我说谎

strcmp,当喂到strtok的结果时,在下面的代码中似乎是公然对我撒谎.

int fSize;
char * buffer=NULL;
char * jobToken = "job";
char * nextToken=NULL;
job * curJob=NULL;
struct node * head=NULL;
struct node * parseList(FILE* file){
    fseek(file,0,SEEK_END);
    fSize=ftell(file);
    buffer = (char*)malloc(fSize+1);
    printf("%d chars: reading buffer now:\n",fSize);
    fseek(file,0,SEEK_SET);
    fread (buffer,1,fSize,file);
    nextToken = strtok(buffer, " \n");
    while (nextToken!=NULL){
            printf("**Running  Token: %s**\n",nextToken);
            if (strcmp(nextToken,jobToken)){
                    printf("Accepted %s  as %s\n",nextToken,jobToken);                
            }else{
                    printf("not %s, %s\n",jobToken,nextToken);
            }

            printf("End of state - %s\n",nextToken);

            nextToken = strtok(NULL, " \n");
    }
    free (buffer);
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

将此输入放在parseList参数的文件中:

job 23
job …
Run Code Online (Sandbox Code Playgroud)

c string strtok strcmp

1
推荐指数
1
解决办法
1567
查看次数

C中字符串比较(strcmp)的问题

我是C的新手.我想比较使用'#DEFINE'和char buf [256]的字符串.这是我的代码.

#define SRV_SHOWMENU "SRV_SHOWMENU"
#define SRV_LOGIN_TRUE = "SRV_LOGIN_SUC"
#define SRV_LOGIN_FAIL = "SRV_LOGIN_FAIL"
#define SRV_REGISTER_OK = "SRV_REGISTER_SUC"
#define SRV_REGISTER_FAIL = "SRV_REGISTER_FAIL"
char buf[256];      // buffer for client data
...
...
...
...
...
...
if(strcmp(buf,SRV_SHOWMENU) == 0 || strcmp(buf,SRV_REGISTER_FAIL) == 0)
{

}
Run Code Online (Sandbox Code Playgroud)

我的C编译器告诉我systax错误"../src/server.c:417:错误:'='令牌之前的预期表达式".但如果我改为"if(strcmp(buf,SRV_SHOWMENU)== 0)",只需一个比较即可.

谢谢.

c string strcmp

1
推荐指数
1
解决办法
1519
查看次数

PHP strcmp没有给出正确的输出

我正在比较两个字符串strcmp(1,2),我得到"-1",我的代码在下面

  <?php
    echo strcmp(1,2);
   ?>
Run Code Online (Sandbox Code Playgroud)

输出:-1

在此输入图像描述

请让我知道为什么我得到假的-1,以及如何处理它?

php strcmp

1
推荐指数
1
解决办法
5438
查看次数

Linux登录和strcmp

我正在为Linux编写一个简单的程序.我有一个功能"addonlyonce"的问题.它比较字符串并添加到没有重复的数组(如果字符串不存在于数组中).该函数运行良好,但不适用于utmp结构.当比较utmp结构的每个字符串总是返回1(这意味着字符串已经存在于数组中 - 并且它是错误的:().您可以编译此代码gcc thiscode.c -o test(它仅适用于Linux).

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

int addonlyonce(char **array, char *str) {
    int i=0;
    printf("I got %s\n",str);
    while(*array != '\0') {
        if(strcmp(*array,str)==0) {
            printf("Already exists!\n");
            return 1;
        }
        i++;
        array++;
    }
    *array=str;
    printf("Sit down on the number: %d\n",i);
    return 0;
}

void printarray(char **array) {
    printf("Array looks like: ");
    while(*array != '\0') {
        printf("%s ",*array);
        array++;
    }
    printf("\n");
}

int main(void) {
    char *users[20]={0};
        char exuser2[]="exuser2";
    struct utmp current_record;
    FILE …
Run Code Online (Sandbox Code Playgroud)

c linux compare strcmp

1
推荐指数
1
解决办法
127
查看次数

strcmp在我的代码中不起作用

我的程序中有strcmp的问题.
我试图按照它们的长度比较两个字符串,所以我使用strcmp(),但是当我在if语句中比较它们时它不能正常工作.

strcmp不比较字符串的长度吗?

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

int main(int argc, char *argv[]) {
    char a[30],b[30],c[30];
    strcpy(a,"computer");
    strcpy(c,"science");
    strcpy(b,a);
    puts(a);
    puts(c);
    puts(b);

    if(strcmp(a,b)==0)
        printf("a=b\n");
    if(strcmp(a,c)<0)
        printf("a<c\n");
    if(strcmp(a,c)>0)
        printf("a>c");

    strcat(a,c);
    puts(a);

    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c string strcmp

1
推荐指数
1
解决办法
1838
查看次数

恼人的strcat()输出

我在使用字符串方面遇到了一些未知问题.它只发生在这种算法的实例上:

由source.c

#include <stdio.h>
#include <string.h>
main()
{
    int cur, max;
    char ast[32];
    printf("Enter the triangle's size: ");
    scanf("%d", &max);
    for(cur = 1; cur <= max; cur++)
    {
        strcat(ast, "*");
        if(cur == 1)
        {
            printf("\n");
        }
        printf("%s\n", ast);
    }
    getch();
}
Run Code Online (Sandbox Code Playgroud)

有时候是这样的:


概述:用输入大小的星号(*)创建三角形的程序.


输入三角形的大小:5

■Z☼]vYⁿbv░↓@*

■Z☼]vYⁿbv░↓@**

■Z☼]vYⁿbv░↓@ *

■Z☼]vYⁿbv░↓@ **

■Z☼]vYⁿbv░↓@ *


它应该看起来像这样:

输入三角形尺寸:5

*

**

***

****

*****
Run Code Online (Sandbox Code Playgroud)

我不知道为什么.有人可以帮忙吗?:)

c text strcmp

1
推荐指数
1
解决办法
84
查看次数

在C中创建我自己的strcmp()函数

我的老师指派我strcmp()在C中编写自己的函数.我确实创建了自己的函数版本,我希望得到一些反馈.

int CompareTwoStrings ( char *StringOne, char *StringTwo ) {
    // Evaluates if both strings have the same length.
    if  ( strlen ( StringOne ) != strlen ( StringTwo ) ) {
        // Given that the strings have an unequal length, it compares between both
        // lengths.
        if  ( strlen ( StringOne ) < strlen ( StringTwo ) ) {
            return ( StringOneIsLesser );
        }
        if  ( strlen ( StringOne ) > strlen ( StringTwo ) ) { …
Run Code Online (Sandbox Code Playgroud)

c strcmp

1
推荐指数
1
解决办法
2万
查看次数

可能执行不好的strcmp

我找到了strcmp函数的一个实现,我把它展示给了一个朋友,他说下面的"值得注意的是它并不总是返回两个不同字符之间的差异;它实际上允许返回任何整数,前提是符号是与字节之间的差异相同." 然后没有给我进一步解释,代码就是这个

int
strcmp(s1, s2)
    register const char *s1, *s2;
{
    while (*s1 == *s2++)
        if (*s1++ == 0)
            return (0);
    return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1));
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释什么是错误吗?什么样的字符串可以导致失败?

c strcmp

1
推荐指数
1
解决办法
196
查看次数

C - Strcmp()不起作用

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

int main()
{

const int SIZE = 100;

char input[SIZE];

while(1)
{
    fgets (input, SIZE - 2, stdin);          // input
    printf("%d", strcmp(input, "exit"));    //returining 10 instead of 0

    if(strcmp(input, "exit") == 0)
    {
        printf("SHELL Terminated\n");
        exit(0);    
    }

return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正面临一个问题.如果我在变量中输入exitinput,则函数strcmp()返回10,但它应该返回0并退出程序,因为exit等于exit.但事实并非如此.

我找不到问题.

c strcmp

1
推荐指数
3
解决办法
932
查看次数

标签 统计

strcmp ×10

c ×9

string ×3

linux ×2

assembly ×1

compare ×1

nasm ×1

php ×1

strtok ×1

text ×1