增加字符数组指针

5

是否可以像指针一样增加/推进字符数组?

例如,我可以对字符指针执行以下操作:

while (*cPtr) 
   printf("c=%c\n", *(cPtr++));

但我无法做到这一点:
// char cArray[] = "abcde";
while (*cArray)
   printf("c=%c\n", *(cArray++));  // Compile error: 19 26  [Error] lvalue required as increment operand

目的是能够在不知道字符数组长度的情况下迭代遍历它。 我的想法是只需继续前进直到找到空字符,除非有更简单的方法?

char a[] = "abcde";
int index = -1;

while (a[++index]) 
   printf("c=%c\n", a[index]);

cArray 是如何定义的?我猜是 char[],但最好还是贴出来 :) - m0skit0
C语言中的“字符串”是以0结尾的字符数组,但并不是每个字符数组都是C语言中的“字符串”。因此可以得出结论:并非每个(char)数组都必须以0结尾。 - alk
4个回答

9
能否像char指针一样递增/推进char数组?
与指针不同,数组不是lvalue,因此您不能修改它。这是数组和指针之间的主要区别。

谢谢你的回答。如果我有一个字符数组 char[] 而不知道它的长度,我该如何迭代这个数组(如果可以的话)? - sazr
使用 sizeof 计算数组大小,然后使用数组索引。阅读 c-faq: Arrays and Pointers 获取更详细的解释。 - haccks
谢谢,我会看一下。我正在寻找一种高效的方法,在不计算数组大小/长度的情况下,只需迭代到空字符(请参见我的帖子中的编辑)。 - sazr
1
@JakeM:如果正确地完成了数组元素数量的计算,那么这个过程将在编译时完成,我认为这对于运行时间非常有效率。但是,对于可变长度数组可能存在例外情况。 - alk

2

做一些像这样的事情:

char cArray[] = "abc def";
char *p = &cArray[0];

while (*p)
   printf("c=%c\n", *(p++));

1
иҝҷжҳҫ然еҸӘйҖӮз”ЁдәҺCиҜӯиЁҖдёӯд»Ҙ0з»“е°ҫзҡ„еӯ—з¬ҰдёІпјҢиҖҢдёҚйҖӮз”ЁдәҺдёҖиҲ¬зҡ„еӯ—з¬Ұж•°з»„гҖӮ - alk

1

你可以做:

for(int i = 0; i < 5; i++) // if you know the length
    printf("c=%c\n", a[i]);

或者使用 sizeof() 获取大小,并将 i < 5 替换为 i < size:
int size = (sizeof(a) / sizeof(*a))

0

我在Keil uVision下成功使用过这个:

char buffer[512];
uint8_t var[512];  // uint8_t = integer 8bit
for(int i = 0; i < 128; i = i + 4)
sprintf(&buffer[i],"%03d,", var[y]); //this will put 4 bytes in buffer

更好的做法是:
char       buffer[128];
uint8_t int_buffer[24];  // gets updated in an interrupt - some sensors values
uint8_t          i = 0;
uint8_t  PrintSize = 0;

while(/*myFile is smaller than 1Mb..*/)
   {
    PrintSize = 0;
    i = 0;
    while(i < 23)
        {
        PrintSize += sprintf(buffer + PrintSize,"%01d,",int_buffer[i]);
        i++;
        }
        PrintSize += sprintf(buffer + PrintSize,"%01d\n", int_buffer[23]);

    //write buffer to a file in my app
   }

文件内容如下:

41,1,210,243,120,0,210,202,170,0,14,28,0,0,0,1,85,0,5,45,0,0,0,1 40,1,215,255,119,0,215,255,170,0,14,37,0,0,0,1,85,0,5,46,0,0,0,1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接