我正在使用strcmp来比较c ++中的字符数组,但是每次出现strcmp都会出现以下错误:error:从'int'到'const char*'的无效转换后跟:error:初始化'int strcmp的参数2 (const char*,const char*)'
我已经包含了string,string.h和stdio.h,这是我的代码,感谢所有回复的人.
另外,除了一堆if语句之外,还有更好的方法来检查缓冲区吗?
int main(int argc, char* argv[])
{
unsigned count = 0;
bool terminate = false;
char buffer[128];
do {
// Print prompt and get input
count++;
print_prompt(count);
cin.getline(buffer, 128);
// check if input was greater than 128, then check for built-in commands
// and finally execute command
if (cin.fail()) {
cerr << "Error: Commands must be no more than 128 characters!" << endl;
}
else if ( strcmp(buffer, 'hist') == 0 ) …
Run Code Online (Sandbox Code Playgroud)Run Code Online (Sandbox Code Playgroud) 所以我从一个文件中逐个读取字符:
char temp[3];
temp[0] = nextchar;
printf("%c",temp[0]); //prints %
temp[1] = nextchar = fgetc(srcptr);
printf("%c",temp[1]); //prints 2
temp[2] = nextchar = fgetc(srcptr);
printf("%c",temp[2]); //prints 0
if(strcmp(temp, "%20") == 0) { printf("%s","blahblah"); }
Run Code Online (Sandbox Code Playgroud)
理想情况下,这应该在最后打印"blahblah".但事实并非如此.那么为什么strcmp返回0,更重要的是:我该如何修复呢?
当我运行程序并回答"是"时,它告诉我我错了.有没有人知道执行此类程序的方法?
#include <string.h>
#include <stdio.h>
int strcmp(const char *str1,const char *str2 );
// I am trying to make a program that asks the user to input an answer
int main()
{
char answer[20];
printf("Can birds fly?\n");
scanf("%s", &answer[20]);
if(strcmp(answer, "yes") == 0)
{
printf("You are right");
}else
{
printf("You are worng");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 以下代码在32位和64位操作系统中表现不同.
char *cat = "v,a";
if (strcmp(cat, ",") == 1)
...
Run Code Online (Sandbox Code Playgroud)
上述条件在32位中为真,但在64位中为假.我想知道为什么会有所不同?32位和64位操作系统都是Linux(Fedora).
我有这行代码
if(strcmp(ob[i].getBrand(), ob[j].getBrand()) > 0)
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
错误C2664:'strcmp':无法将参数1从'std :: string'转换为'const char*'
这是否意味着strcmp不能使用字符串,而是必须将其转换为char?
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main()
{
string x;
cin>>x;
if(strcmp(&x.at(0), "M") == 0)
{
cout<<"midget ";
}
else if(strcmp(&x.at(0), "J") == 0)
{
cout<<"junior ";
}
else if(strcmp(&x.at(0), "S") == 0)
{
cout<<"senior ";
}
else
{
cout<<"invalid code";
}
if(strcmp(&x.at(1), "B") == 0)
{
cout<<"boys";
}
else
{
cout<<"girls";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经使用上面的代码来比较MB应该返回"侏儒男孩",但它继续下降到其他并返回"无效的codeboys".不知何故第二个条件正常.我的诊断告诉我,在第一次比较它返回66.我猜这是"M"的ASCII代码.但是我现在如何解决我的问题呢?
我在C中编写一个非常简单的函数来检查字符串是绝对路径还是相对路径.无论我尝试什么,它总是返回false.
这是我尝试过的:
int isAbsolute(char *str){
if(strcmp(str,"/")){
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我称之为:
printf("%d\n", isAbsolute("/"));
Run Code Online (Sandbox Code Playgroud)
每次都返回false.很明显,我错过了一些明显的东西,但我无法弄明白......
我无法在命令提示符下键入第二个输入,它说我的程序已停止。我只是尝试自己的代码。我添加了两个函数来检查字符串的长度和内容。而且我可以简单地使用strcmp(),但是我避免将其用于练习。
#include<stdio.h>
#include<string.h>
int lencompare(char *str1, char *str2){
int len1, len2;
len1 = strlen(str1);
len2 = strlen(str2);
return (len1==len2) ? 1 : 0;
}
int compare(char *str1, char *str2){
int i =0, flag=0;
if(lencompare(str1, str2)==1){
while(*(str1+i) != '\0');
{
if(*(str1+i) == *(str2+i))
flag = 1;
else
flag = 0;
i++;
}
return flag;
}
if(lencompare(str1, str2) == 0){
printf("Length is Different");
}
}
int main(){
char *str1 , *str2 ;
fgets(str1, 20, stdin);
fgets(str2, 20, stdin);
if(compare(str1, str2) == 1){ …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
#include <stdio.h>
#include <stdlib.h>
char values[] = {"abcde"};
int main(int argc, char *argv[])
{
printf("%d\n", strcmp(&values[0], argv[1]));
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式编译和启动:
$ gcc main.c -o main
$ ./main a
98
Run Code Online (Sandbox Code Playgroud)
的结果strcmp是 98,所以值不一样。当我替换&values[0]通过"a"在代码中,我看到,他们是相同的(strcmp输出等于0)。
那么有没有办法values[0]作为字符串访问?我想我需要\0在最后以某种方式指定,以便将字符用作字符串,但我找不到方法。
我正在尝试实现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)