我是C新手,而且我正在創建庫來處理字符串。比較C中的字符會拋出錯誤
現在我正在創建一個名爲'indexOf'的函數,它返回字符放置在字符串中的索引。
的main.c(讀碼有關錯誤信息評論)
#include <stdio.h>
#include <stdlib.h>
#include "jstring.h"
int main()
{
char name[] = "Juan";
printf("The char 'a' is in the index %d \n\n", indexOf(name, 'a'));
return 0;
}
jstring.h
#include <string.h>
int indexOf(char haystack[], char needle)
{
int index = 0;
while(haystack[index] != '\0')
{
//Prints char by char untill the needle is found (for testing)
printf("%c\n", haystack[index]);
if(strcmp(haystack[index], needle) == 0) //Causes error (app strops working)
{
printf("Needle found!");
return index;
}
index++;
}
return -1;
}
如果我用下面的代碼,這是行不通的
if(haystack[index] == needle) //Is never true
{
printf("Needle found!");
return index;
}
程序我知道名稱是「胡安」應該返回2作爲字符'a'的位置的索引。我不知道這段代碼有什麼問題,我已經習慣了指針,也許是與此相關的東西。
我已經搜索了很多關於比較字符的StackOverflow問題,但還沒有找到最後沒有用到的strcmp()
或與我的函數類似的目標。
不要把函數定義在頭文件,如果你想代碼分割成多個文件,然後使用您鏈接在一起兩個源文件,並只將函數原型聲明放在頭文件中。 –
我也可能會開始閱讀最佳實踐。我習慣於其他語言,因爲我是網絡開發人員,但這是我第一週C –
C具有[*翻譯單元*](https://en.wikipedia.org/wiki/Translation_unit_%28programming)的概念%29)。翻譯單元基本上是一個包含所有頭文件的單一源文件。編譯器使用這個翻譯單元並創建一個目標文件,然後將其饋入鏈接器,該鏈接器將所有目標文件和外部庫鏈接到一個可執行程序中。這些大部分都是由編譯器前端程序隱藏的。 –