c++ - For-Loop on Pointer: Does it move the whole address range? -


i have bit of code:

int count_x(char* p, char x) {   if (p == nullptr) return 0;    int count = 0;    (; *p != 0; p++)   {     if (*p == x)     count++;   }   return count; } 

the input in case char-array:

char v[] = { "ich habe einen beispielsatz erstellt!"}; 

since looking cpp book "c++ programming language - 4th edition" got code there , trying figure out.

when stepping through it, noticed loop moves memory address in increments of one. not surprising me, following question arose , couldn't find answer yet: loop reduce overall memory range or whole range being moved?

since knowlege use "block" in whole storing such char-array (or type of array), guess later since don't see reducing boundries. "knowledge" have ask: doesn't cause major issues theoretically possible read parts of memory programm shouldn't have access to?

will have keep in mind when dealing (very) long arrays?

in c , c++, "strings this" implicitly nul-terminated. means end char value 0 or '\0' (same thing).

so loop:

for (; *p != 0; p++) 

advances p until reaches point *p 0 -- end of string.

if p not point within nul-terminated buffer or string, loop indeed move on memory beyond end of memory buffer started in. kind of error common , relying on strings being nul-terminated results (indirectly) in lot of buffer overruns, security holes, , crashing , memory corrupting programs.

to around this, c++ offers alternative ways store , interact strings of characters, including std::string. these not rely on positioned nul terminator work, although c-style code interact may.

and in c++17, string view provides non-owning low-cost way refer bounded size string no nul terminator.


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -