Changes between Version 13 and Version 14 of Docs/Prog/Manual/ApplicationLibraries/lib825ev/String
- Timestamp:
- 04/12/23 15:54:12 (20 months ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Docs/Prog/Manual/ApplicationLibraries/lib825ev/String
v13 v14 13 13 In the above example the szMsg and szID character arrays are each allocated 10 bytes. C strings require a null character at the end to tell various functions such as strcpy when to stop reading characters. This means szMsg and szID can contain a maximum of 9 characters each. If the ''strcpy(szID, "123")'' is changed to ''strcpy(szID, "1234567890")'' the compiler will generate code that writes the null character into an invalid memory location. When the program is executed this may crash the indicator immediately when this code executes, it may not cause a crash until some other time in execution when that memory location becomes important, or it may cause some other strange behavior in the program. If the strcpy is changed to ''strcpy(szID, "123456")'' szID will not overflow, but szMsg will overflow in the sprintf statement that follows. 14 14 15 snprintf is a sa ver alternative to sprintf. snprintf has an additional parameter. The second parameter specifies the size of the buffer. The snprintf function will not exceed the specified buffer size.15 snprintf is a safer alternative to sprintf. snprintf has an additional parameter. The second parameter specifies the size of the buffer. The snprintf function will not exceed the specified buffer size. 16 16 {{{ 17 17 char szMsg[10]; … … 21 21 PrintLCD(szMsg); 22 22 }}} 23 The 825 library also provides sprintf_s which is a macro to perform snprintf and automatically provide the second parameter using the sizeof the buffer provided in the first parameter. This can only be used with the first parameter is a simple character array as in the above example. If the first parameter is a pointer to an array this cannot be used because the sizeof operator will not give the desired result. 23 24 25 There is also a strncpy function that limits string copy to a specified length. However, strncpy is not recommended as a safe strcpy because it does not automatically NULL terminate strings. 24 26 25 27 825 applications may also be compiled using the newer C++ string type: std::string. Using std::string does not require as much diligence from the programmer. The string will automatically allocate more memory and grow if needed by an assignment. The operations are also more like the BASIC language so this is helpful for programmers who are not as skilled in C/C++.