Note that there are some explanatory texts on larger screens.

plurals
  1. POGarbage being printed when using strcpy
    text
    copied!<p>I have a function that will parse some data coming in. My problem is that after using strncpy I get some garbage when I try to print it. I try using malloc to make the char array the exact size.</p> <p>Code:</p> <pre><code>void parse_data(char *unparsed_data) { char *temp_str; char *pos; char *pos2; char *key; char *data; const char newline = '\n'; int timestamp = 0; temp_str = (char*)malloc(strlen(unparsed_data)); g_print("\nThe original string is: \n%s\n",unparsed_data); //Ignore the first two lines pos = strchr(unparsed_data, newline); strcpy(temp_str, pos+1); pos = strchr(temp_str, newline); strcpy(temp_str, pos+1); //Split the line in two; The key name and the value pos = strchr(temp_str, ':'); // ':' divides the name from the value pos2 = strchr(temp_str, '\n'); //end of the line key = (char*)malloc((size_t)(pos-temp_str)-1); //allocate enough memory data = (char*)malloc((size_t)(pos2-pos)-1); strncpy(key, temp_str, (size_t)(pos-temp_str)); strncpy(data, pos + 2, (size_t)(pos2-pos)); timestamp = atoi(data); g_print("size of the variable \"key\" = %d or %d\n", (size_t)(pos-temp_str), strlen(key)); g_print("size of the variable \"data\" = %d or %d\n", (size_t)(pos2-pos), strlen(data)); g_print("The key name is %s\n",key); g_print("The value is %s\n",data); g_print("End of Parser\n"); } </code></pre> <p>Output:</p> <pre><code>The original string is: NEW_DATAa_PACKET Local Data Set 16-byte Universal Key Time Stamp (microsec): 1319639501097446 Frame Number: 0 Version: 3 Angle (deg): 10.228428 size of the variable "key" = 21 or 22 size of the variable "data" = 18 or 21 The key name is Time Stamp (microsec) The value is 1319639501097446 F32 End of Parser </code></pre> <p>Run it again:</p> <pre><code> The original string is: NEW_DATAa_PACKET Local Data Set 16-byte Universal Key Time Stamp (microsec): 1319639501097446 Frame Number: 0 Version: 3 Angle (deg): 10.228428 size of the variable "key" = 21 or 25 size of the variable "data" = 18 or 18 The key name is Time Stamp (microsec)ipe The value is 1319639501097446 F End of Parser </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload