我目前正在從頭開始編寫strstr。在我的代碼中,我編制了一個字符串的索引,並且最終我需要使用另一個指針保存字符串上的特定點。這裏是我正在努力的代碼部分:指向索引指針
char *save_str;
for(int i=0;i<length_str1; i++)
{
if(str1[i]==str2[0])
{
*save_str=str[i];
但是,它告訴我,我不能這樣做。我怎樣纔能有一個指向特定字符的指針?
我目前正在從頭開始編寫strstr。在我的代碼中,我編制了一個字符串的索引,並且最終我需要使用另一個指針保存字符串上的特定點。這裏是我正在努力的代碼部分:指向索引指針
char *save_str;
for(int i=0;i<length_str1; i++)
{
if(str1[i]==str2[0])
{
*save_str=str[i];
但是,它告訴我,我不能這樣做。我怎樣纔能有一個指向特定字符的指針?
快速實用的答案
save_str = &str[i];
擴展描述鏜回答
還有一個特點,在 「純C」和關於數組和指針的「C++」。
當程序員想要地址全陣列,或者第一個項目的,在「&」操作不是必需的,甚至認爲一些編譯器錯誤或警告。
char *myptr = NULL;
char myarray[512];
strcpy(myarray, "Hello World");
// this is the same:
myptr = myarray;
// this is the same:
myptr = &myarray[0];
當程序員想要地址特定項目的,那麼「&」要求操作:
save_str = &str[i];
我讀的地方,即,加入這些功能,在purpouse。
許多開發人員避免這種情況,並使用指針算術,而是:
...
char *save_str;
...
// "&" not required
char *auxptr = str1;
for(int i=0; i < length_str1; i++)
{
// compare contents of pointer, not pointer, itself
if(*auxptr == str2[0])
{
*save_str = *auxptr;
}
// move pointer to next consecutive location
auxptr++;
}
...
就個人而言,我希望,「&」應該是使用始終,並避免混淆。 乾杯。
非常有幫助..謝謝:) – 2012-02-17 01:37:41
您可以從以下兩種方法可供選擇:
save_str = &str[i];
or
save_str = str+i;
編譯器給出的錯誤信息是什麼? – 2012-02-16 22:52:49
這是一個功課練習嗎? – 2012-02-16 22:53:57
在處理這樣的事情之前,你應該確保你理解指針和事物指針之間的區別。 '* save_str'在你的上下文中沒有意義。 – 2012-02-16 23:06:52