Receiving garbled `char` array returned by a functionHow to loop over objects or pass object to function?Shift register 1's and 0's array to 4 int's function not workingI2C_Anything String / Char Array issuesHow can I pass a char array as the parameter to a function?HID-Project problems with keycode enumsTransfer a struct's data to an external struct via serial?Dynamicly sized array as a class memberPassing a substring to a function or subSet array to array passed as parameter in constructorPassing user defined callback functions to a library method

How long would it take to cross the Channel in 1890's?

Why don't countries like Japan just print more money?

UK - Working without a contract. I resign and guy wants to sue me

I found a password with hashcat, but it doesn't work

What's currently blocking the construction of the wall between Mexico and the US?

Did the CIA blow up a Siberian pipeline in 1982?

Is there a term for the belief that "if it's legal, it's moral"?

DBCC checkdb on tempdb

How can lift be less than thrust that is less than weight?

Does Doppler effect happen instantly?

Heavily limited premature compiler translates text into excecutable python code

Trainee keeps passing deadlines for independent learning

Shooting someone's past self using special relativity

Do I need a shock-proof watch for cycling?

Explain why a line can never intersect a plane in exactly two points.

How do I handle a table mixing up the DM and the players' roles too often?

I don't like coffee, neither beer. How to politely work my way around that in a business situation?

Understanding the reasoning of the woman who agreed with Shlomo to "cut the baby in half"

When two first person POV characters meet

Why tighten down in a criss-cross pattern?

Can a rogue use Sneak Attack in a Darkness spell cast by another player?

If the Dragon's Breath spell is cast on a familiar, does it use the wizard's DC or familiar's DC?

What happened to Steve's Shield in Iron Man 2?

Calibrations vs. Riemannian holonomy



Receiving garbled `char` array returned by a function


How to loop over objects or pass object to function?Shift register 1's and 0's array to 4 int's function not workingI2C_Anything String / Char Array issuesHow can I pass a char array as the parameter to a function?HID-Project problems with keycode enumsTransfer a struct's data to an external struct via serial?Dynamicly sized array as a class memberPassing a substring to a function or subSet array to array passed as parameter in constructorPassing user defined callback functions to a library method






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








2















I return a char[300] array from a function. If I intialize a char* variable with it, the return is garbled, but not if I append it to a String. What gives?



 const char* post2 = uploadHourCsv(timeNow,pulseChangeHour) ;
String postS2 = "";
postS2 = uploadHourCsv(timeNow,pulseChangeHour) ;
//const char* post2 = uploadHourCsv(timeNow,pulseChangeHour) ;
if( debug )
Serial.print("received in loop() as : [");
Serial.println(post2);
Serial.print("String : [");
Serial.println(postS2);


...

char postStr[300] = "";
// populate array
if( debug )
Serial.print("postStrCsv generated: ");
Serial.println(postStr);

return postStr;



postStrCsv generated: 00000003;3| 0.00;8|17.55;9|17.55;10|18.12;11|16.92;20|93817;22|93789;101|6;time|1559646000;



received in loop() as : [000?⸮@⸮⸮?" ⸮⸮?17.55;9|17.58! @0⸮⸮⸮⸮G% @5~`⸮h⸮?⸮⸮



String : [00000003;3| 0.00;8|17.55;9|17.55;10|18.12;11|16.92;20|93817;22|93789;101|6;time|1559646000;











share|improve this question
























  • What exactly does the uploadHourCsv return? Since post2 is declared as a pointer, without any size, the function has to return a pointer to an already allocated string to do this.

    – chrisl
    Jun 4 at 11:16











  • char postStr[300] with contents displayed in blockquote.

    – tony gil
    Jun 4 at 14:53







  • 1





    How is this Arduino specific? Despite two excellent (and upvoted) answers below, I say that such questions 1) belong on stackoverflow.com and 2) will get better answers more quickly tehre (no offence to those here)

    – Mawg
    Jun 5 at 6:19











  • tks. do you think that we should move this to SO? flag for moderator attention or flag to close saying "belongs in so"

    – tony gil
    Jun 7 at 16:55

















2















I return a char[300] array from a function. If I intialize a char* variable with it, the return is garbled, but not if I append it to a String. What gives?



 const char* post2 = uploadHourCsv(timeNow,pulseChangeHour) ;
String postS2 = "";
postS2 = uploadHourCsv(timeNow,pulseChangeHour) ;
//const char* post2 = uploadHourCsv(timeNow,pulseChangeHour) ;
if( debug )
Serial.print("received in loop() as : [");
Serial.println(post2);
Serial.print("String : [");
Serial.println(postS2);


...

char postStr[300] = "";
// populate array
if( debug )
Serial.print("postStrCsv generated: ");
Serial.println(postStr);

return postStr;



postStrCsv generated: 00000003;3| 0.00;8|17.55;9|17.55;10|18.12;11|16.92;20|93817;22|93789;101|6;time|1559646000;



received in loop() as : [000?⸮@⸮⸮?" ⸮⸮?17.55;9|17.58! @0⸮⸮⸮⸮G% @5~`⸮h⸮?⸮⸮



String : [00000003;3| 0.00;8|17.55;9|17.55;10|18.12;11|16.92;20|93817;22|93789;101|6;time|1559646000;











share|improve this question
























  • What exactly does the uploadHourCsv return? Since post2 is declared as a pointer, without any size, the function has to return a pointer to an already allocated string to do this.

    – chrisl
    Jun 4 at 11:16











  • char postStr[300] with contents displayed in blockquote.

    – tony gil
    Jun 4 at 14:53







  • 1





    How is this Arduino specific? Despite two excellent (and upvoted) answers below, I say that such questions 1) belong on stackoverflow.com and 2) will get better answers more quickly tehre (no offence to those here)

    – Mawg
    Jun 5 at 6:19











  • tks. do you think that we should move this to SO? flag for moderator attention or flag to close saying "belongs in so"

    – tony gil
    Jun 7 at 16:55













2












2








2








I return a char[300] array from a function. If I intialize a char* variable with it, the return is garbled, but not if I append it to a String. What gives?



 const char* post2 = uploadHourCsv(timeNow,pulseChangeHour) ;
String postS2 = "";
postS2 = uploadHourCsv(timeNow,pulseChangeHour) ;
//const char* post2 = uploadHourCsv(timeNow,pulseChangeHour) ;
if( debug )
Serial.print("received in loop() as : [");
Serial.println(post2);
Serial.print("String : [");
Serial.println(postS2);


...

char postStr[300] = "";
// populate array
if( debug )
Serial.print("postStrCsv generated: ");
Serial.println(postStr);

return postStr;



postStrCsv generated: 00000003;3| 0.00;8|17.55;9|17.55;10|18.12;11|16.92;20|93817;22|93789;101|6;time|1559646000;



received in loop() as : [000?⸮@⸮⸮?" ⸮⸮?17.55;9|17.58! @0⸮⸮⸮⸮G% @5~`⸮h⸮?⸮⸮



String : [00000003;3| 0.00;8|17.55;9|17.55;10|18.12;11|16.92;20|93817;22|93789;101|6;time|1559646000;











share|improve this question
















I return a char[300] array from a function. If I intialize a char* variable with it, the return is garbled, but not if I append it to a String. What gives?



 const char* post2 = uploadHourCsv(timeNow,pulseChangeHour) ;
String postS2 = "";
postS2 = uploadHourCsv(timeNow,pulseChangeHour) ;
//const char* post2 = uploadHourCsv(timeNow,pulseChangeHour) ;
if( debug )
Serial.print("received in loop() as : [");
Serial.println(post2);
Serial.print("String : [");
Serial.println(postS2);


...

char postStr[300] = "";
// populate array
if( debug )
Serial.print("postStrCsv generated: ");
Serial.println(postStr);

return postStr;



postStrCsv generated: 00000003;3| 0.00;8|17.55;9|17.55;10|18.12;11|16.92;20|93817;22|93789;101|6;time|1559646000;



received in loop() as : [000?⸮@⸮⸮?" ⸮⸮?17.55;9|17.58! @0⸮⸮⸮⸮G% @5~`⸮h⸮?⸮⸮



String : [00000003;3| 0.00;8|17.55;9|17.55;10|18.12;11|16.92;20|93817;22|93789;101|6;time|1559646000;








c++






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jun 5 at 7:59









Edgar Bonet

26k22546




26k22546










asked Jun 4 at 11:11









tony giltony gil

208215




208215












  • What exactly does the uploadHourCsv return? Since post2 is declared as a pointer, without any size, the function has to return a pointer to an already allocated string to do this.

    – chrisl
    Jun 4 at 11:16











  • char postStr[300] with contents displayed in blockquote.

    – tony gil
    Jun 4 at 14:53







  • 1





    How is this Arduino specific? Despite two excellent (and upvoted) answers below, I say that such questions 1) belong on stackoverflow.com and 2) will get better answers more quickly tehre (no offence to those here)

    – Mawg
    Jun 5 at 6:19











  • tks. do you think that we should move this to SO? flag for moderator attention or flag to close saying "belongs in so"

    – tony gil
    Jun 7 at 16:55

















  • What exactly does the uploadHourCsv return? Since post2 is declared as a pointer, without any size, the function has to return a pointer to an already allocated string to do this.

    – chrisl
    Jun 4 at 11:16











  • char postStr[300] with contents displayed in blockquote.

    – tony gil
    Jun 4 at 14:53







  • 1





    How is this Arduino specific? Despite two excellent (and upvoted) answers below, I say that such questions 1) belong on stackoverflow.com and 2) will get better answers more quickly tehre (no offence to those here)

    – Mawg
    Jun 5 at 6:19











  • tks. do you think that we should move this to SO? flag for moderator attention or flag to close saying "belongs in so"

    – tony gil
    Jun 7 at 16:55
















What exactly does the uploadHourCsv return? Since post2 is declared as a pointer, without any size, the function has to return a pointer to an already allocated string to do this.

– chrisl
Jun 4 at 11:16





What exactly does the uploadHourCsv return? Since post2 is declared as a pointer, without any size, the function has to return a pointer to an already allocated string to do this.

– chrisl
Jun 4 at 11:16













char postStr[300] with contents displayed in blockquote.

– tony gil
Jun 4 at 14:53






char postStr[300] with contents displayed in blockquote.

– tony gil
Jun 4 at 14:53





1




1





How is this Arduino specific? Despite two excellent (and upvoted) answers below, I say that such questions 1) belong on stackoverflow.com and 2) will get better answers more quickly tehre (no offence to those here)

– Mawg
Jun 5 at 6:19





How is this Arduino specific? Despite two excellent (and upvoted) answers below, I say that such questions 1) belong on stackoverflow.com and 2) will get better answers more quickly tehre (no offence to those here)

– Mawg
Jun 5 at 6:19













tks. do you think that we should move this to SO? flag for moderator attention or flag to close saying "belongs in so"

– tony gil
Jun 7 at 16:55





tks. do you think that we should move this to SO? flag for moderator attention or flag to close saying "belongs in so"

– tony gil
Jun 7 at 16:55










2 Answers
2






active

oldest

votes


















11














It's because you're returning a pointer to a local variable.



You are only returning the address in memory where your char array is allocated. That allocation is on the stack and only exists for the lifetime of the function. But you still have the address where that memory was allocated, and you're using it as if it's still allocated.



When you append it to a String room is allocated on the heap and the data is copied in. That heap allocation remains until the String object is destroyed, either by going out of scope or by you manually destroying it.



It's pure chance that the data is still available and intact at the point of copying.



In short:



  • You must never return a pointer to a locally allocated (non-static) array.

Things you can do that are correct:



  • Pass an array pointer to the function to be populated by the function

  • Return a pointer to a statically allocated local array

  • Return a String object (though I wouldn't recommend using String for anything)

My preferred method is the first, whereby you define an array in the outer scope, then pass that (and possibly the array length) to the function. The function then populates the array it has been passed. This also has the advantage that the function can use the return value to indicate a status or other quantity.



For example:



void myFunc(char *buf, int len) 
for (int i = 0; i < len - 1; i++)
buf[i] = 'A';

buf[len - 1] = 0;


char myBuf[20];
myFunc(myBuf, 20);
Serial.println(myBuf);

--> AAAAAAAAAAAAAAAAAAAA





share|improve this answer


















  • 1





    U da man! UPVOTED and ACCEPTED. Re use of String: totally agree, unsafe memory allocation in String class.

    – tony gil
    Jun 4 at 14:50



















1














Following Majenko's invaluable advice and incorporating another similar approach, final working implementation was to treat the function as a method to operate upon the char[300] array as "out parameter".



char postStr[300] = "";
uploadHourCsv(timeNow,pulseChangeHour,postStr) ;
...

void uploadHourCsv(int unixtimeEvent, int pulseChange, char* postStr)
// prepare data and variables
strcat(postStr, stationId);
strcat(postStr,";3





share|improve this answer


















  • 2





    If you make the first strcat a strcpy instead, you can avoid initializing the array first. (And note that the way you initialize it in the caller fills the entire length with zero bytes, not just the first element, so that takes a lot longer than necessary unless it gets optimized away.)

    – Peter Cordes
    Jun 5 at 10:29











Your Answer






StackExchange.ifUsing("editor", function ()
return StackExchange.using("schematics", function ()
StackExchange.schematics.init();
);
, "cicuitlab");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "540"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2farduino.stackexchange.com%2fquestions%2f65995%2freceiving-garbled-char-array-returned-by-a-function%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









11














It's because you're returning a pointer to a local variable.



You are only returning the address in memory where your char array is allocated. That allocation is on the stack and only exists for the lifetime of the function. But you still have the address where that memory was allocated, and you're using it as if it's still allocated.



When you append it to a String room is allocated on the heap and the data is copied in. That heap allocation remains until the String object is destroyed, either by going out of scope or by you manually destroying it.



It's pure chance that the data is still available and intact at the point of copying.



In short:



  • You must never return a pointer to a locally allocated (non-static) array.

Things you can do that are correct:



  • Pass an array pointer to the function to be populated by the function

  • Return a pointer to a statically allocated local array

  • Return a String object (though I wouldn't recommend using String for anything)

My preferred method is the first, whereby you define an array in the outer scope, then pass that (and possibly the array length) to the function. The function then populates the array it has been passed. This also has the advantage that the function can use the return value to indicate a status or other quantity.



For example:



void myFunc(char *buf, int len) 
for (int i = 0; i < len - 1; i++)
buf[i] = 'A';

buf[len - 1] = 0;


char myBuf[20];
myFunc(myBuf, 20);
Serial.println(myBuf);

--> AAAAAAAAAAAAAAAAAAAA





share|improve this answer


















  • 1





    U da man! UPVOTED and ACCEPTED. Re use of String: totally agree, unsafe memory allocation in String class.

    – tony gil
    Jun 4 at 14:50
















11














It's because you're returning a pointer to a local variable.



You are only returning the address in memory where your char array is allocated. That allocation is on the stack and only exists for the lifetime of the function. But you still have the address where that memory was allocated, and you're using it as if it's still allocated.



When you append it to a String room is allocated on the heap and the data is copied in. That heap allocation remains until the String object is destroyed, either by going out of scope or by you manually destroying it.



It's pure chance that the data is still available and intact at the point of copying.



In short:



  • You must never return a pointer to a locally allocated (non-static) array.

Things you can do that are correct:



  • Pass an array pointer to the function to be populated by the function

  • Return a pointer to a statically allocated local array

  • Return a String object (though I wouldn't recommend using String for anything)

My preferred method is the first, whereby you define an array in the outer scope, then pass that (and possibly the array length) to the function. The function then populates the array it has been passed. This also has the advantage that the function can use the return value to indicate a status or other quantity.



For example:



void myFunc(char *buf, int len) 
for (int i = 0; i < len - 1; i++)
buf[i] = 'A';

buf[len - 1] = 0;


char myBuf[20];
myFunc(myBuf, 20);
Serial.println(myBuf);

--> AAAAAAAAAAAAAAAAAAAA





share|improve this answer


















  • 1





    U da man! UPVOTED and ACCEPTED. Re use of String: totally agree, unsafe memory allocation in String class.

    – tony gil
    Jun 4 at 14:50














11












11








11







It's because you're returning a pointer to a local variable.



You are only returning the address in memory where your char array is allocated. That allocation is on the stack and only exists for the lifetime of the function. But you still have the address where that memory was allocated, and you're using it as if it's still allocated.



When you append it to a String room is allocated on the heap and the data is copied in. That heap allocation remains until the String object is destroyed, either by going out of scope or by you manually destroying it.



It's pure chance that the data is still available and intact at the point of copying.



In short:



  • You must never return a pointer to a locally allocated (non-static) array.

Things you can do that are correct:



  • Pass an array pointer to the function to be populated by the function

  • Return a pointer to a statically allocated local array

  • Return a String object (though I wouldn't recommend using String for anything)

My preferred method is the first, whereby you define an array in the outer scope, then pass that (and possibly the array length) to the function. The function then populates the array it has been passed. This also has the advantage that the function can use the return value to indicate a status or other quantity.



For example:



void myFunc(char *buf, int len) 
for (int i = 0; i < len - 1; i++)
buf[i] = 'A';

buf[len - 1] = 0;


char myBuf[20];
myFunc(myBuf, 20);
Serial.println(myBuf);

--> AAAAAAAAAAAAAAAAAAAA





share|improve this answer













It's because you're returning a pointer to a local variable.



You are only returning the address in memory where your char array is allocated. That allocation is on the stack and only exists for the lifetime of the function. But you still have the address where that memory was allocated, and you're using it as if it's still allocated.



When you append it to a String room is allocated on the heap and the data is copied in. That heap allocation remains until the String object is destroyed, either by going out of scope or by you manually destroying it.



It's pure chance that the data is still available and intact at the point of copying.



In short:



  • You must never return a pointer to a locally allocated (non-static) array.

Things you can do that are correct:



  • Pass an array pointer to the function to be populated by the function

  • Return a pointer to a statically allocated local array

  • Return a String object (though I wouldn't recommend using String for anything)

My preferred method is the first, whereby you define an array in the outer scope, then pass that (and possibly the array length) to the function. The function then populates the array it has been passed. This also has the advantage that the function can use the return value to indicate a status or other quantity.



For example:



void myFunc(char *buf, int len) 
for (int i = 0; i < len - 1; i++)
buf[i] = 'A';

buf[len - 1] = 0;


char myBuf[20];
myFunc(myBuf, 20);
Serial.println(myBuf);

--> AAAAAAAAAAAAAAAAAAAA






share|improve this answer












share|improve this answer



share|improve this answer










answered Jun 4 at 11:21









MajenkoMajenko

70.6k43683




70.6k43683







  • 1





    U da man! UPVOTED and ACCEPTED. Re use of String: totally agree, unsafe memory allocation in String class.

    – tony gil
    Jun 4 at 14:50













  • 1





    U da man! UPVOTED and ACCEPTED. Re use of String: totally agree, unsafe memory allocation in String class.

    – tony gil
    Jun 4 at 14:50








1




1





U da man! UPVOTED and ACCEPTED. Re use of String: totally agree, unsafe memory allocation in String class.

– tony gil
Jun 4 at 14:50






U da man! UPVOTED and ACCEPTED. Re use of String: totally agree, unsafe memory allocation in String class.

– tony gil
Jun 4 at 14:50














1














Following Majenko's invaluable advice and incorporating another similar approach, final working implementation was to treat the function as a method to operate upon the char[300] array as "out parameter".



char postStr[300] = "";
uploadHourCsv(timeNow,pulseChangeHour,postStr) ;
...

void uploadHourCsv(int unixtimeEvent, int pulseChange, char* postStr)
// prepare data and variables
strcat(postStr, stationId);
strcat(postStr,";3





share|improve this answer


















  • 2





    If you make the first strcat a strcpy instead, you can avoid initializing the array first. (And note that the way you initialize it in the caller fills the entire length with zero bytes, not just the first element, so that takes a lot longer than necessary unless it gets optimized away.)

    – Peter Cordes
    Jun 5 at 10:29















1














Following Majenko's invaluable advice and incorporating another similar approach, final working implementation was to treat the function as a method to operate upon the char[300] array as "out parameter".



char postStr[300] = "";
uploadHourCsv(timeNow,pulseChangeHour,postStr) ;
...

void uploadHourCsv(int unixtimeEvent, int pulseChange, char* postStr)
// prepare data and variables
strcat(postStr, stationId);
strcat(postStr,";3





share|improve this answer


















  • 2





    If you make the first strcat a strcpy instead, you can avoid initializing the array first. (And note that the way you initialize it in the caller fills the entire length with zero bytes, not just the first element, so that takes a lot longer than necessary unless it gets optimized away.)

    – Peter Cordes
    Jun 5 at 10:29













1












1








1







Following Majenko's invaluable advice and incorporating another similar approach, final working implementation was to treat the function as a method to operate upon the char[300] array as "out parameter".



char postStr[300] = "";
uploadHourCsv(timeNow,pulseChangeHour,postStr) ;
...

void uploadHourCsv(int unixtimeEvent, int pulseChange, char* postStr)
// prepare data and variables
strcat(postStr, stationId);
strcat(postStr,";3





share|improve this answer













Following Majenko's invaluable advice and incorporating another similar approach, final working implementation was to treat the function as a method to operate upon the char[300] array as "out parameter".



char postStr[300] = "";
uploadHourCsv(timeNow,pulseChangeHour,postStr) ;
...

void uploadHourCsv(int unixtimeEvent, int pulseChange, char* postStr)
// prepare data and variables
strcat(postStr, stationId);
strcat(postStr,";3






share|improve this answer












share|improve this answer



share|improve this answer










answered Jun 4 at 15:35









tony giltony gil

208215




208215







  • 2





    If you make the first strcat a strcpy instead, you can avoid initializing the array first. (And note that the way you initialize it in the caller fills the entire length with zero bytes, not just the first element, so that takes a lot longer than necessary unless it gets optimized away.)

    – Peter Cordes
    Jun 5 at 10:29












  • 2





    If you make the first strcat a strcpy instead, you can avoid initializing the array first. (And note that the way you initialize it in the caller fills the entire length with zero bytes, not just the first element, so that takes a lot longer than necessary unless it gets optimized away.)

    – Peter Cordes
    Jun 5 at 10:29







2




2





If you make the first strcat a strcpy instead, you can avoid initializing the array first. (And note that the way you initialize it in the caller fills the entire length with zero bytes, not just the first element, so that takes a lot longer than necessary unless it gets optimized away.)

– Peter Cordes
Jun 5 at 10:29





If you make the first strcat a strcpy instead, you can avoid initializing the array first. (And note that the way you initialize it in the caller fills the entire length with zero bytes, not just the first element, so that takes a lot longer than necessary unless it gets optimized away.)

– Peter Cordes
Jun 5 at 10:29

















draft saved

draft discarded
















































Thanks for contributing an answer to Arduino Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2farduino.stackexchange.com%2fquestions%2f65995%2freceiving-garbled-char-array-returned-by-a-function%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

Vilaño, A Laracha Índice Patrimonio | Lugares e parroquias | Véxase tamén | Menú de navegación43°14′52″N 8°36′03″O / 43.24775, -8.60070

Cegueira Índice Epidemioloxía | Deficiencia visual | Tipos de cegueira | Principais causas de cegueira | Tratamento | Técnicas de adaptación e axudas | Vida dos cegos | Primeiros auxilios | Crenzas respecto das persoas cegas | Crenzas das persoas cegas | O neno deficiente visual | Aspectos psicolóxicos da cegueira | Notas | Véxase tamén | Menú de navegación54.054.154.436928256blindnessDicionario da Real Academia GalegaPortal das Palabras"International Standards: Visual Standards — Aspects and Ranges of Vision Loss with Emphasis on Population Surveys.""Visual impairment and blindness""Presentan un plan para previr a cegueira"o orixinalACCDV Associació Catalana de Cecs i Disminuïts Visuals - PMFTrachoma"Effect of gene therapy on visual function in Leber's congenital amaurosis"1844137110.1056/NEJMoa0802268Cans guía - os mellores amigos dos cegosArquivadoEscola de cans guía para cegos en Mortágua, PortugalArquivado"Tecnología para ciegos y deficientes visuales. Recopilación de recursos gratuitos en la Red""Colorino""‘COL.diesis’, escuchar los sonidos del color""COL.diesis: Transforming Colour into Melody and Implementing the Result in a Colour Sensor Device"o orixinal"Sistema de desarrollo de sinestesia color-sonido para invidentes utilizando un protocolo de audio""Enseñanza táctil - geometría y color. Juegos didácticos para niños ciegos y videntes""Sistema Constanz"L'ocupació laboral dels cecs a l'Estat espanyol està pràcticament equiparada a la de les persones amb visió, entrevista amb Pedro ZuritaONCE (Organización Nacional de Cegos de España)Prevención da cegueiraDescrición de deficiencias visuais (Disc@pnet)Braillín, un boneco atractivo para calquera neno, con ou sen discapacidade, que permite familiarizarse co sistema de escritura e lectura brailleAxudas Técnicas36838ID00897494007150-90057129528256DOID:1432HP:0000618D001766C10.597.751.941.162C97109C0155020