sazr
sazr

Reputation: 25928

Increment Char Array Pointer

Is it possible to increment/advance a char array like I can a char pointer?

For example I can do this for a char pointer:

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

But I am not able to do this:

// char cArray[] = "abcde";
while (*cArray)
   printf("c=%c\n", *(cArray++));  // Compile error: 19 26  [Error] lvalue required as increment operand

The purpose is to be able to iterate over a char array when I dont know the length of the array. My thinking is that I just want to advance till I find a null character I guess unless theres an easier way?

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

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

Upvotes: 5

Views: 17778

Answers (4)

Stefan
Stefan

Reputation: 1

I have used this with success under 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

Better way to do this:

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
   }

File content is like this:

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

Upvotes: 0

van pham
van pham

Reputation: 19

Do something like that:

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

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

Upvotes: 2

Andreas DM
Andreas DM

Reputation: 10998

You can do:

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

or get the size with sizeof() and replace i < 5 with i < size:

int size = (sizeof(a) / sizeof(*a))

Upvotes: 1

haccks
haccks

Reputation: 106012

Is it possible to increment/advance a char array like I can a char pointer?

Unlike pointers, arrays are not lvalues and you can't modify it. That's a major difference between arrays and pointers.

Upvotes: 9

Related Questions