Quick question about null terminator string!

Hello,
I always feel that a char array should end with a "\0".
But just to clear up something here, if I do:
char *a[10];
and I fill out the array with 10 characters, then, should we *always* append the "\0" at the end of this array?
And if so, should it be appended at a[9] location or a[10] ??? It confuses me a little because since the array is supposed to take 10 characters, then does the compiler save an extra space at the 11th character location for the null terminator string?
OR
Is it up to us to make sure we fill the array with up to 9 characters making sure to save the 10th location in the array for the null terminator string?
So in a nutshell, once we finish up with a char array do we do this:
a[9] = '\0';
or this:
a[10] = '\0';
I excuse the simple question but this has been haunting me for a while, but thanks for all replies!!!
r

Ok, a few misconceptions here.
I always feel that a char array should end with a "\0".
This is not strictly true.  This is only true of the data is to be treated as a string.  Often you will use a char array to hold binary data.  Normally such binary data will NOT end in a NUL character.  In fact, most binary data may contain
NUL characters sprinkled throughout the data.
char *a[10];
This is NOT an array of ten characters.  This is an array of ten pointers to characters (or character arrays).  You probably intended
char a[10];
You then state
I fill out the array with 10 characters, then, should we *always* append the "\0" at the end of this array?
Again, this depends on whether you intend the data to be a string or binary data.  I will assume you mean string from here on out.  For a string, yes you should probably always append a '\0' Of course you don't actually have room for that NUL --
see the following answer.  (Actually there are some string APIs that let you pass in a number of characters to process and those will work with no terminating NUL, but frankly you are playing with fire when you do that so I would recommend always putting
the trailing NUL in myself.)
And if so, should it be appended at a[9] location or a[10]
The declaration "char a[10]" causes the compiler to reserve *exactly* ten bytes of data for that array.  If you write to location a[10], that is the
eleventh byte and will cause undefined behavior.  At best you might not notice anything bad.  At worst it could cause any sort of crazy data corruption.  It could easily crash your program.
You would need to write the NUL character at a[9].   Note that writing NUL at a[9] will overwrite the last byte that you put into that array.
As a side note here:  This is why you try to always use a proper string class like std::string when using C++ -- it takes care of all of that for you, including growing the string larger if you fill it up.  Then you don't need to worry
about these pesky details that are easy to get wrong.

Similar Messages

  • Quick question about null terminator string in arrays?

    Hello,
    If I do this:
    char volatile xxo_[20];
    memset(xxo_, ' ', 20);
    xxo_[1] = '\0';                                                                             
    Am I not supposed to see the '0' symbolizing the null terminated string in 2nd array location like this:
    xxo_[]= {' ','0',' ',' ',' ',' ',' ',' ',' ',' ' ,' ',' ', ' ',' ',' ',' ',' ',' ',' ',' ',} 
    Why am I seeing this?
    xxo_[]= {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ' ,' ',' ', ' ',' ',' ',' ',' ',' ',' ',' ',} 
    Thanks for all replies!

    Standard debugging paranoia applies.
    Are you running the code you think you are?  Do you need to recompile / rebuild / check your .exe against your source?  Do you just have a corrupt .pdb that needs to be rebuilt?  Nuke your exe and pdbs and start again.
    Try introducing a source code error or something that won't compile to verify that you are running the code you think you are compiling.  And if that works, then alter the program to do something else that you are expecting to work.  For example,
    change the memset ' ' to write an 'x' or something and see if you can observe that in your debugger.
    This is obviously not a standalone reproduction of the problem.  Try to avoid introducing other aspects that might contribute to confusing the issue.  Can you write a simple hello-world-sized program that does just this without all the rest of
    your program?
    char volatile to_[20];
    memset( (void*)to_, ' ', 20 );
    to_[0] = 0;
    Note that without the (void*) this won't compile in Visual C++ because of the
    volatile qualifier.
    What does the disassembly say?  Does the code that was generated logically do what the C code you wrote is intended to do?  Can you generate an assembly listing and examine that for logical flaws?
    Are you building with any kind of optimization settings?  sometimes breakpoints aren't where you think they are in "release mode" or optimized builds because instructions can be reordered and entire blocks of statements may be altered in ways
    that don't affect the final results, but make things a bit mysterious during debugging.
    Can you try a different debugger such as windbg and see if you observe the same thing?

  • A quick question about WebDynpro SLD and R/3 with concurrent users

    Hello ,
    I have a very quick question about Webdynpros and SLD connecting to an R/3 system, when you configure a webdynpro to connect to an R/3 system using SLD, you configure a user name and password from the R/3  for the SLD to use. What I would like to know is when I have concurrent users of my webdynpro, how can I know what one user did in R/3 and what another user did? Is there a way for the users of the web dynpro to use their R/3 credentials so SLD can access the R/3? Like dynamically configuring the SLD for each user?
    - I would like to avoid leaving their their passwords open in the code ( configuring two variable to get the users username and password and use these variables as JCO username and password )
    Thanks Ubergeeks,
    Guy

    Hi Guy
    You will have to use Single Sign On to achieve this. In the destination you have defined to connect to R/3 , there is an option to 'useSSO' instead of userid and password. This will ensure that calls to R/3 will be with the userid that has logged into WAS. You wont need to pass any passwords because  a login ticket is generated from WAS and passed on to R/3. The userid is derived from this ticket.
    For this to happen you will have to maintain a trust relation ship between R/3 and your WAS ,there is detailed documentation of this in help files. Configuration is very straight forward and is easy to perform
    Regards
    Pran

  • QUICK QUESTION ABOUT PORTS

    Hi, I have a quick question about port forwarding/mapping. My question, lets say I am running MSN messenger, who's ports are 6880-6900. But lets say I am running a torrent application or something else that requires those ports. If both applications were running at the same time, would this cause interference with them on the same ports or now. Thanks
    Nathan

    Normally, only one application can listen to a specific port number at a time. If MSN is grabbing those 21 ports then your torrent app won't be able to run.
    However, most apps don't work that way - even if they use multiple ports, they don't use them all at the same time, so MSN might use 6880 when it starts up, leaving the others open for other applications to use if needed.
    Only experimentation will answer that one.

  • Hi, I have quick question about use of USEBEAN tag in SP2. When I specify a scope of SESSION for the java bean, it does not keep the values that I set for variable in the bean persistent.Thanks,Sonny

     

    Make sure that your bean is implementing the serializable interface and that
    you are accessing the bean from the session with the same name.
    Bryan
    "Sandeep Suri" <[email protected]> wrote in message
    news:[email protected]..
    Hi, I have quick question about use of USEBEAN tag in SP2. When I
    specify a scope of SESSION for the java bean, it does not keep the
    values that I set for variable in the bean persistent.Thanks,Sonny
    Try our New Web Based Forum at http://softwareforum.sun.com
    Includes Access to our Product Knowledge Base!

  • Quick Question about Cisco 3560 and the Web Device Manager

    Alright, I have a quick question that I am curious about but I haven't found any information
    about it.
    When I log into my Cisco 3560 using the web portal to get to the Device Manager. Below the
    diagram of the switch, then under the Dashboard there is section called Switch
    Health, Port Utilization.
    Under the Switch Health there is Bandwidth Used, Packet Error. Those two options just sit
    at zero and do not move. The Port tilization graph is also sitting at zero.
    Is there a way to make them functional?

    Anyone notice performance increase or decrease of their HD when using the nVidia IDE SW drivers?  particularly with a 74GB Raptor?  I've also heard of burner issues when installing the IDE SW but have not used my burner yet.

  • Quick question about RegExp

    Just a quick question.
    In other languages, I can do this...
    while(reg.exec(string)) {
         //loop through results
    And while looping, I can access the current match with something like reg.Match or whatever. 
    Is this possible in AS?

    Look up the RegExp class.

  • IMovie - quick questions about video files when importing and optimizing

    Hi, have some quick questions. I think they are simple.
    1. When I import a video (from say iPhoto), where does it get "Move" or "Copy" to?
    2. Why would I want to do "Copy" instead of "Move", because isn't it then taking up more space?
    3. I'm wondering if after I optimize a video, I can stash away the original (non-optimized video that I either "Move"d or "Copy"d earlier) into an external hd.
    4. By the way, what is the new file name of the optimized video?
    Though things are working fine in iMovie and iPhoto, I'm trying to manage hard disk space, and hope answers to these questions will help.
    Do you guys have a guideline on how to manage hard disk space when it comes to iphoto and imovie?
    Thanks.

    As has been suggested you can encourage people to download QuickTime player by doing something like this...
    http://www.mirroroftheuniverse.com/Songs.html
    You can also present your songs like this...
    http://roddymckay.com/Satellite/JukeBox.html
    This is a SnoCap jukebox and you need an account to use it but you'll get the link to ESnips on the above page.
    A 3 minute song has a file size of about 30 Mb in AIFF format. Converting it to MP3 reduces it to about 3.5 Mb and M4A to about 5.5 Mb.
    iTunes will do these conversions for you and M4A is far superior to MP3 as far as sound quality is concerned.

  • Is const jchar * null terminated string in c++?

    hi,
    i read through the complete JNI documentation.
    i searched all possible srcs to know "is const jchar * string returned by method GetStringChars(JString,NULL) to c++ declared in jni.h is NULL terminated or not ?" but i couldn't find it.
    please help me.
    because i am using this const jchar * string directly in my c++ code by just casting it to (const WCHAR *)
    sometimes it is crashing the jvm for no reason sorry! i dont know the reason.

    timberlake1865 wrote:
    i searched all possible srcs to know "is const jchar * string returned by method GetStringChars(JString,NULL) to c++ declared in jni.h is NULL terminated or not ?" but i couldn't find it.No.
    by just casting it to (const WCHAR *)That of course is unlikely to be correct regardless of whether it was null terminated or not.

  • Two quick questions about Library after moving beginning on a new computer

    Hi there,
    I just moved from Windows to Mac, meaning I had to move my iTunes library from the old PC to my new MBA.
    Just a couple of quick questions.
    1. When I started iTunes on my new Mac, in the preferences I directed the media folder to the folder with all my itunes music/podcasts etc, and then I imported the Library XML file.  Is this incorrect? Should I have imported a different file? Should I have used the itl file instead? 
    If so, should I delete the library and start again?  (if this is the case, please suggest the best way of doing this without affecting my media)
    - a kind of sub-question to this one:  some of the media files arent showing up in the iTunes library, but they are in the media folder on the ext HDD.  Is there a way I can find out which ones havent been recognized by iTunes?  Whats the best way of getting them in to my library?
    2. Pretty much half of my podcasts have not been loaded in the new iTunes.  The ones that havent were ones that I subscribed to on my iPhone, whereas the ones that show up in iTunes were ones I downloaded from iTunes.  When I connect my iPhone and sync it with iTunes, will those podcasts show up in iTunes?  Or is there a risk that they will be deleted from my iPhone?
    Cheers,

    The .xml is lacking some information such as ratings, date added, and play count.  Using the .itl includes this information but cannot be imported using the method you did.
    A complete library is everything in the iTunes folder.  By using the method you did you left the artwork behind in the artwork folder on the other machine.
    Selecting the media folder in preferences does not get iTunes to recognize the media.  All it does is tell iTunes to start storing new media in that location.
    Using the method I outlined nothing will be missed (with the exception of WMA) because you aren't rebuilding your library, you are using the one that already exists.
    You don't have to re-copy everything as long as you get the stuff you missed and re-assemble it all as it was before except not on the Mac.
    What are the iTunes library files? - http://support.apple.com/kb/HT1660
    More on iTunes library files and what they do - http://en.wikipedia.org/wiki/ITunes#Media_management
    What are all those iTunes files? - http://www.macworld.com/article/139974/2009/04/itunes_files.html
    Where are my iTunes files located? - http://support.apple.com/kb/ht1391

  • Quick question about Quicktime media keys.......

    I had a question about encoding video and media keys. It seems to me that the only codec that allows you to encode it with a media key is Sorenson (Sorenson 3 I think). Why are they the only ones that are enabling that in their codecs? Is it kind of a dying technology or practice? I've experimented with Sorenson 3 and Sorenson Squeeze trials and, even though it looks ok, it simply doesn't stack up to others like Apple's H.264 or open-source x264 or even Xvid. I guess I wish there were a way to be able to use media key options with all the new H.264 codecs. Is it possible to do that, either with Xcode or AppleScript? Any help would be greatly appreciated!!

    QuickTime has supported 'media keys" since version 3 but you can only add them using the third party software.
    You would be better served by contacting Sorenson and asking them about their support for newer codecs.

  • Quick Question about fade effect

    Quick Question:
    If I wanted to add a Fade Effect from one state to another
    when a button is pressed.
    How would I do that within the code?

    quote:
    Originally posted by:
    atta707
    You can do something like on the click of the button:
    var fader:Fade = new Fade(targetUIComponent);
    fader.duration = 1000;
    fader...;
    fader.play();
    or listen for currentStateChanging event and write the same
    similar code.
    or define transitions from one state to another like:
    <mx:Transition id="toOneOnly" fromState="*"
    toState="OneOnly">
    <mx:Sequence id="t1" targets="{[p2]}">
    <mx:Iris showTarget="false" duration="350"/>
    <mx:SetPropertyAction name="visible"/>
    <mx:SetPropertyAction target="{p2}"
    name="includeInLayout"/>
    </mx:Sequence>
    </mx:Transition>
    Hey,
    I would like to use the "transition from one state to
    another", but if you can explain each part for me that would be
    helpful.
    If you can comment on each line of that code that would help
    thanks

  • Quick question about showing drive space

    Hi,
    Just got a quick query about showing remaining drive space on the desktop.
    Before I wiped my Pismo and reinstalled Tiger (bad kernel panic), my hard drive and any other connected drives (pen drive, iPod, iDisk, etc) showed up on my Desktop with the name and drive capacity and remaining space underneath the icon.
    Now I've reinstalled, the drive capacity and remaining space don't show up on the Desktop, and I can't find how to turn it on. I've been through Preferences several times and can't find an obvious switch. Have I missed something? I'm running Tiger 10.4.8 with the machine spec below.
    Thanks in advance,
    Rob Johnson

    Sometimes, for no obvious reason, the Finder can be slow to update. And sometimes it updates instantly. Why? "Only the Shadow knows...." or maybe the Apple programmers.
    Francine
    Francine
    Schwieder

  • Quick question about sim transfer

    Hi all,
    I have a quick question and hopefully one of you guys would be able to help me. My friend purchased his 3g iphone today and hes giving me his old iphone. I currently have a blackjack and I wanted to take the sims card from the blackjack and put into the original iphone. Will the iphone work with my sims card? It is an older sims card, says 64k on it. If not, would I have to bring it into at&t and get it activated w/a different sims card? Hopefully all this isnt confusing. Thanks for any help. Cheers!

    You're welcome.
    I guess that also means I would have to upgrade to the 20 dollar data plan without the text messages as well?
    The unlimited data plan for the first generation iPhone still costs $20/mo and includes 200 SMS. The only thing you need to get from an at&t store is a new SIM card. Take the iPhone with you telling them what you plan on doing and they should give you a new SIM card at no cost.
    You will activate this iPhone with iTunes on your computer. If you are an existing subscriber, your calling plan will transfer to the iPhone, and any existing data plan you are using with your current phone will be cancelled. If you are an existing subscriber, your only selection will be the $20/mo unlimited data plan which includes 200 SMS, and you can select 1,500 SMS for an additional $10/mo or have unlimited SMS for an additional $20/mo.

  • Quick question about iMovie

    I have a question about iMovie. I've used Final Cut Pro before using iMovie, and FCP allowed the user to play two video/images on top of each other. You could play with the opacity and the duration very easily.
    I'm wondering, can you do the same thing with iMovie? I'll be VERY disappointed if you can't do it.
    iBook G4

    Hi
    And You could take a look at the plug-ins to iMovie.
    - Stupendous software http://www.stupendous-software.com
    - GeeThree http://www.geethree.com
    - cf/x. http://www.imovieplugins.com
    and possibly more.
    QT-pro can do this as said above - but You need to be very precise.
    But I would do this in FCP and then export as QT.mov to do the rest in iMovie
    if necessary.
    Yours Bengt W

Maybe you are looking for