If statement looks acceptable, but has error: expected expression before ‘)’ token
If statement looks acceptable, but has error: expected expression before ‘)’ token
我已将我的代码最小化到重现此错误所需的代码。我有一个我认为非常好的 if 语句,但是 gcc 坚持认为它不是一个有效的语句。
#define SOMECHAR *
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char* my_string = (char*) malloc(sizeof(char[5]));
strcpy(my_string, "aa*a");
int i;
for (i=0; i< sizeof(my_string); i++){
if(strcmp(&my_string[i], SOMECHAR) == 0){
printf("%s", "b");
} else {
printf("%s", &my_string[i]);
}
}
}
首先,size_of(my_string)
是指针的大小,而不是它指向的数组的大小。
接下来,strcmp(&my_string[i], SOMECHAR)
将扩容为strcmp(&my_string[i], *)
,您需要:
#define SOMECHAR "*"
但是,我相信你想要这个:
if(my_string[i] == '*'){
putchar('b');
} else {
putchar(my_string[i]);
}
并且正如 M.M 在评论中所说,您泄漏了分配的内存
如果你真的需要定义那个角色,只需这样做:
#define SOMECHAR '*'
/*some other code */
if(my_string[i] == SOMECHAR){
putchar('b');
} else {
putchar(my_string[i]);
}
感谢您的评论和建议,我明白了我真正想要的是什么。
第一个问题是#define 一个字符,它需要用单引号引起来。而 sizeof() 完全是为了描述指针的大小,而不是它有多长。我应该使用 strlen()。新手错误。我这里的主要方法没有 return,所以一旦修复了我已经遇到的错误,这将是一个问题。
但是有一种更好的方法可以完成我需要的工作而无需循环和条件检查。在 string.h 中有一个名为 strchr 的函数,它将 return 指向字符串中最后一个字符的指针,然后再匹配给定字符。我已经像这样修改了我的代码:
#define SOMECHAR '*'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char* line = (char*) malloc(sizeof(char[5]));
strcpy(line, "aa*a");
int i;
char* ending;
printf("%s\n", line);
ending = strchr(line, SOMECHAR);
ending[0] = '[=10=]';
printf("%s\n", line);
return 0;
}
这会在匹配前的字符处终止给定的字符串。这是我的任务所需要的。感谢大家的帮助。
我已将我的代码最小化到重现此错误所需的代码。我有一个我认为非常好的 if 语句,但是 gcc 坚持认为它不是一个有效的语句。
#define SOMECHAR *
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char* my_string = (char*) malloc(sizeof(char[5]));
strcpy(my_string, "aa*a");
int i;
for (i=0; i< sizeof(my_string); i++){
if(strcmp(&my_string[i], SOMECHAR) == 0){
printf("%s", "b");
} else {
printf("%s", &my_string[i]);
}
}
}
首先,size_of(my_string)
是指针的大小,而不是它指向的数组的大小。
接下来,strcmp(&my_string[i], SOMECHAR)
将扩容为strcmp(&my_string[i], *)
,您需要:
#define SOMECHAR "*"
但是,我相信你想要这个:
if(my_string[i] == '*'){
putchar('b');
} else {
putchar(my_string[i]);
}
并且正如 M.M 在评论中所说,您泄漏了分配的内存
如果你真的需要定义那个角色,只需这样做:
#define SOMECHAR '*'
/*some other code */
if(my_string[i] == SOMECHAR){
putchar('b');
} else {
putchar(my_string[i]);
}
感谢您的评论和建议,我明白了我真正想要的是什么。 第一个问题是#define 一个字符,它需要用单引号引起来。而 sizeof() 完全是为了描述指针的大小,而不是它有多长。我应该使用 strlen()。新手错误。我这里的主要方法没有 return,所以一旦修复了我已经遇到的错误,这将是一个问题。
但是有一种更好的方法可以完成我需要的工作而无需循环和条件检查。在 string.h 中有一个名为 strchr 的函数,它将 return 指向字符串中最后一个字符的指针,然后再匹配给定字符。我已经像这样修改了我的代码:
#define SOMECHAR '*'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char* line = (char*) malloc(sizeof(char[5]));
strcpy(line, "aa*a");
int i;
char* ending;
printf("%s\n", line);
ending = strchr(line, SOMECHAR);
ending[0] = '[=10=]';
printf("%s\n", line);
return 0;
}
这会在匹配前的字符处终止给定的字符串。这是我的任务所需要的。感谢大家的帮助。