[英]an array of char pointers in c
我想使用一個字符指針數組,其中數組中的每個指針都指向另一個字符數組中的一個字符,因此,我可以通過指針打印字符數組。
char city[14] = {'D', 'u', 'b', 'a', 'i'};
char *charPointers[100] = {0};
for(size_t i = 0;city[i] != '\0'; i++)
charPointers[i] = &city[i];
printf("\ncity = ");
for(size_t i = 0; *charPointers != 0; i++)
//printf("%c", *(charPointers[i]));
putchar(*charPointers[i]);
charPointers 是一個指針數組還是一個字符串?
如果它是一個字符串,那么我如何使用一個指針數組,使每個指針都指向一個字符?
什么是實現我想要的優雅方式? (最好使用指針算法)
charPointers
是一個指針數組; 它絕對不僅僅是一個字符串。
由於它不是字符串,因此您的第二個問題沒有實際意義。
你的循環條件不正確; 你需要寫:
for (size_t i = 0; charPointers[i] != 0; i++)
//printf("%c", *(charPointers[i]));
putchar(*charPointers[i]);
putchar('\n');
您正在測試第一個指針是否為空; 不是。 您需要在每次迭代時檢查當前指針。 下面的循環也可以幫助您了解正在發生的事情:
for (size_t i = 0; charPointers[i] != 0; i++)
printf("%zd [%s]\n", i, charPointers[i]);
這段代碼:
#include <stdio.h>
int main(void)
{
char city[14] = {'D', 'u', 'b', 'a', 'i'};
char *charPointers[100] = {0};
for(size_t i = 0;city[i] != '\0'; i++)
charPointers[i] = &city[i];
printf("city = ");
for (size_t i = 0; charPointers[i] != 0; i++)
putchar(*charPointers[i]);
putchar('\n');
for (size_t i = 0; charPointers[i] != 0; i++)
printf("%zd [%s]\n", i, charPointers[i]);
return 0;
}
產生這個輸出:
city = Dubai
0 [Dubai]
1 [ubai]
2 [bai]
3 [ai]
4 [i]
charPointer
是一個指向char
的指針數組。 指向 char 數組的指針將是char (*p)[100];
.
您的代碼幾乎正確,這是非段錯誤版本:
char city[14] = {'D', 'u', 'b', 'a', 'i', '\0'};
char* charPointers[100] = {0};
size_t i =0;
for(i = 0; city[i] != '\0'; i++)
charPointers[i] = city + i;
charPointers[i] = city + i; // Don't forget to add the \0 at the end !
printf("\ncity = ");
for(i = 0; *charPointers[i] != '\0'; i++)
printf("%c", *charPointers[i]);
我真的不知道你想做什么,但上面的代碼在charPointers
每個元素中存儲了一個指向字符串city
每個字符的指針。
但是,如果您想在charPointers
存儲指向現有字符串的指針(例如, charPointers
每個元素charPointers
指向一個城市名稱),那么正確的代碼如下:
char* cityNames[NB_CITY];
char* city = "Dubai";
cityNames[0] = city;
printf("%s\n", cityNames[0]); // gives "Dubai"
charPointers
顯然是一個指向字符的指針數組。 數組city
是一個字符串(如注釋中指出的那樣),因為您指定的長度為 14,但只提供了 5 個實際字符。 其余的設置為零,這將終止字符串。
獲得相同結果的更清晰的方法是:
const char *city = "Dubai";
你對*charPointers
循環很奇怪,因為它把*charPointers
當作一個字符,而它實際上是一個指針。
也許你的意思是:
for(size_t i = 0; charPointers[i] != NULL; ++i)
printf("%s\n", charPointers[i]);
我想使用一個字符指針數組,其中數組中的每個指針都指向另一個字符數組中的一個字符
為什么? 在現實世界的編程中,您永遠沒有理由想要這樣做。
因此,我將能夠通過指針打印字符數組
的確。 如果您的程序太快且太有效,這會很方便。
charPointers 是一個指針數組還是一個字符串?
它是一個指針數組。
什么是實現我想要的優雅方式?
沒有優雅的方法可以“使用一個字符指針數組,其中數組中的每個指針都指向另一個字符數組中的一個字符”。 這是一種混淆,除了讓你的代碼變慢和不可讀之外沒有任何意義。
理智、優雅的代碼看起來像這樣:
const char city [] = {'D', 'u', 'b', 'a', 'i', '\0'};
printf("City = ");
print_str(city);
...
void print_str (const char* str)
{
while(*str != '\0')
{
putchar(*str);
str++;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.