当我编译几个简短的C程序时,我遇到了一些错误,而且我对于发生的事情非常迷茫:
第一个给出了这些错误:
Q3.c:在函数âsort中:
Q3.c:11:警告:隐式声明函数âq_sortâ
Q3.c:顶级:
Q3.c:14:警告:âq_sortâ
的冲突类型Q3.c:11:注意:之前的“q_sort”隐式声明就在这里
Q3.c:在函数âmainâ:
Q3.c:52:警告:隐式声明函数âmallocâ
Q3.c:52:警告:内置函数的不兼容隐式声明âmallocâ
Q3.c:56:警告:隐式声明函数â€
解决部分代码:
void sort(int* number, int n){
/*Sort the given array number , of length n*/
q_sort(number, 0, (n - 1));
}
void q_sort(int* numbers, int left, int right)
{
int pivot, l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = numbers[left];
while (left < right)
{
while ((numbers[right] >= pivot) && (left < right))
right--;
if (left != right)
{
numbers[left] = numbers[right];
left++;
}
while ((numbers[left] <= pivot) && (left < right))
left++;
if (left != right)
{
numbers[right] = numbers[left];
right--;
}
}
numbers[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot)
q_sort(numbers, left, pivot-1);
if (right > pivot)
q_sort(numbers, pivot+1, right);
}
由于我的其他问题程序都使用相同的排序方法,并给出相同的错误,修复此问题将解决所有问题。
编辑:另外一个问题。我在另一个程序上得到了这个错误
Q5.c:在功能âsticky中:
Q5.c:29:警告:指针和整数之间的比较
Q5.c:29:警告:与字符串文字进行比较导致未指定的行为
在这部分代码中:
void sticky(char* word){
int i = 0;
/*Convert to sticky caps*/
while (word[i] !="\0"){ // line 29
if (i%2 == 0)
word[i] = toUpperCase(word[i]);
else
word[i] = toLowerCase(word[i]);
i++;
}
}
答案 0 :(得分:7)
交换两个函数的定义...在C中,您必须先声明(或定义)一个函数,然后才能使用它。
对于第二个问题:您必须使用单引号来定义字符。
答案 1 :(得分:2)
你也可以在.c文件的开头定义它们(它可以在你的库之后),然后你可以在任何地方以任何顺序使用它们。
像:
#include <stdio.h>
void sort(int*, int n);
void q_sort(int*, int, int);
...
...
/* Any code */
/* Your sort function */
/* Your q_sort function */
/* Any code*/
答案 2 :(得分:1)
功能sticky()
的问题在于,当您执行char
时,您要将char*
与(word[i] != "\0")
进行比较。
“\ 0”不是字符\0
,它是指向包含字符\0
的字符串的指针。要解决此问题,请改用(word[i] != '\0')
。
答案 3 :(得分:0)
除了以上几个答案中所说的内容之外,我没有什么可说的。当你编写一个函数并在文件中使用它时,只需要一个C基础。
当您使用/ cal一个像'qsort'这样的函数时,您应该始终在程序中的任何位置调用它之前/之上。所以规则是你的程序应该知道你正在调用的函数的原型。在这种情况下它:
void q_sort(int * numbers,int left,int right);
在#include所有必要的'.h'文件并定义所有宏之后,通常会在程序文件的顶部提及此原型。
或者您也可以在调用之前选择在顶部定义函数(完整函数体)。
如果没有找到声明,那么其他编译器就会陷入困境。