我正在尝试实现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) 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的新手.我想比较使用'#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)",只需一个比较即可.
谢谢.
我正在比较两个字符串
strcmp(1,2),我得到"-1",我的代码在下面
<?php
echo strcmp(1,2);
?>
Run Code Online (Sandbox Code Playgroud)
输出:-1

请让我知道为什么我得到假的-1,以及如何处理它?
我正在为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) 我的程序中有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) 我在使用字符串方面遇到了一些未知问题.它只发生在这种算法的实例上:
由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)
我不知道为什么.有人可以帮忙吗?:)
我的老师指派我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) 我找到了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)
有人可以解释什么是错误吗?什么样的字符串可以导致失败?
#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.但事实并非如此.
我找不到问题.