我正在编写一个将给定数组拆分为2个部分的方法。它将前半部分保留在原始数组中,并使用标记分割位置的符号将另一半放入临时数组中。我得到的错误如下:
Warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
if(strcmp(input[i], symbol) == 0){
^
In file included from process.c:7:0:
/usr/include/string.h:144:12: note: expected ‘const char *’ but argument is of type ‘char’
extern int strcmp (const char *__s1, const char *__s2)
^
process.c:95:16: warning: assignment makes integer from pointer without a cast
input[i] = NULL;
^
process.c:96:26: warning: comparison between pointer and integer
while(input[i + 1] != NULL){
^
process.c:98:22: warning: assignment makes integer from pointer without a cast
input[i + 1] = NULL;
^
这是我的代码:
char *splitCommands(char *input, char symbol){
int i = 0, j = 0;
char *temp;
int symbIndex; // where the symbol was
while(input[i] != NULL){
if(strcmp(input[i], symbol) == 0){
symbIndex = i;
input[i] = NULL;
while(input[i + 1] != NULL){
temp[j] = input[i + 1];
input[i + 1] = NULL;
i++;
j++;
}
break;
}
i++;
}
return temp;
}
答案 0 :(得分:0)
您可以直接进行此比较
if (input[i] == symbol)
因为input[i]
和symbol
的类型为char
,因此您比较它们的值,当您比较地址的字符串时,这就是您需要strcmp()
的原因。
和
input[i + 1] = NULL;
相当于
input[i + 1] = (void *) 0;
因此,你试图将指针分配给char
,这也是错误的,也许你的意思是
input[i + 1] = 0;
或以更多c-ish的方式
input[i + 1] = '\0';
此外,while
条件,同样的问题,只是
while (input[i])
就足够了,如果你希望你的代码更具可读性,我个人认为,
while (input[i] != '\0')
更具可读性。
你不能使用temp
之类的,因为它没有初始化,你需要为它分配空间,就像这样
temp = malloc(1 + estimatedSizeInBytes);
if (temp == NULL)
return NULL;
/* add the '\0' terminator */
temp[realSize - 1] = '\0';
其中realSize <= estimatedSize
。
完成使用后,您还应该记住free()
此函数返回的指针。
答案 1 :(得分:0)
input[i]
和symbol
是char
。所以imput[i] == symbol
的营地。并且不要忘记为char *tmp
答案 2 :(得分:0)
您的代码存在一些问题,但编译错误的主要问题和原因之一是strcmp()将两个指向c样式字符串的指针作为参数。你传递两个char,而不是指针。
另一个问题是你将char分配给NULL,但是NULL只应该用于指针,而不是像char / int / float这样的其他类型。如果您正在尝试检查c样式字符串的结尾,请检查char是否等于0或'\ 0'。在完成此程序之前,您可能需要花更多时间学习c样式字符串和指针。
我不会为您完成作业/工作,但我会举例说明如何使用strcmp():
#include <string.h>
#include <stdio.h>
int main()
{
char String1[4] = "abc";
char String2[4] = "xyz";
int Result = strcmp(String1, String2);
if (Result < 0)
printf("%s < %s\n", String1, String2);
if (Result == 0)
printf("%s = %s\n", String1, String2);
if (Result > 0)
printf("%s > %s\n", String1, String2);
return 0;
}
输出:abc&lt; XYZ
这是来自cplusplus.com的额外strcmp() reference。