473,883 Members | 2,484 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

reset char array

Hi,

This is probably piece of cake for you C gurus but it is giving me a
headache. I'm still not really used with pointers and chars so many things
are going wrong. Practicing makes wonders but the problem is that I don't
have much time to practice. Ok, here's the question, how to reset a char
array?
I got this code :

char test[8] = "";

printf( subStr( "result = %s \n" , "blablabla" , 3,5, test ) );
printf( subStr( "result = %s \n" , "another string" , 3,5, test ) );

subStr is a selfmade function which get's a few chars out of the input
parameter and puts it in the output parameter (test in this case). The first
time I use it it works ok, but of course, the second time the test char
array will grow further instead of being replaces. So while the result
should be :
"bla"
"the"
I get
"bla"
"thebla"
It's because of subStr uses strcat and the second time I use it the test
array is still filled with some old stuff. How to get rid of that? I tried
free( test );
between those 2 but that didn't work.

Greetings,
Rick
Nov 13 '05
14 14411
On Fri, 24 Oct 2003 19:25:00 GMT, "Fred L. Kleinschmidt"
<fred.l.kleinsc hmidt@nospam_bo eing.com> wrote:
char *test(){
char *s = "blabla";
return s;
} // result is, well, not readable


Make test a static variable so it stays in scope:
char *test(){
static char *s = "blabla";
return s;
}


What's wrong with the first version? Mind you, "static" means that s is static,
the string of chars being pointed at is already static. So the first version if
perfectly fine, or just

return "blabla";

they're all the same.
Nov 13 '05 #11
Mac
On Fri, 24 Oct 2003 11:26:49 +0000, Ed Morton wrote:


On 10/24/2003 10:21 AM, Rick wrote:
You're right, I'm better of with a good function. I fixed it and now it
works like the strncpy function, much better. But the string drame ain't
over, I got another questions. First of all, I noticed that all the string
functions I saw (I looked at string.h) need a pointer parameter so they can
write directly to it. I tried to make functions without that but then they
won't work anymore, an example :

char *test(){
char *s = "blabla";
return s;
} // result is, well, not readable
The above should be fine. Are you sure you didn't instead do:


Hmm. I'd have thought that "blabla" wouldn't be guaranteed to exist
outside of test. I gather from your reply, though, that it is? Is that
because "blabla" is a constant, and not an initializer (as it is below)?

char s[7] = "blabla";

as that would be wrong.

<snip>
if ( strcmp( "A", "A" ) == 1) printf( "That just has to be right." );


Make that "== 0". See
http://www.acm.uiuc.edu/webmonkeys/b...14.html#strcmp

Ed.


Mac
--
Nov 13 '05 #12
On Sat, 25 Oct 2003 10:10:47 -0700, "Mac" <fo*@bar.net> wrote:
On Fri, 24 Oct 2003 11:26:49 +0000, Ed Morton wrote:


On 10/24/2003 10:21 AM, Rick wrote:
You're right, I'm better of with a good function. I fixed it and now it
works like the strncpy function, much better. But the string drame ain't
over, I got another questions. First of all, I noticed that all the string
functions I saw (I looked at string.h) need a pointer parameter so they can
write directly to it. I tried to make functions without that but then they
won't work anymore, an example :

char *test(){
char *s = "blabla";
return s;
} // result is, well, not readable
The above should be fine. Are you sure you didn't instead do:


Hmm. I'd have thought that "blabla" wouldn't be guaranteed to exist
outside of test. I gather from your reply, though, that it is? Is that
because "blabla" is a constant, and not an initializer (as it is below)?


Yes. In this context, the quoted material is a string literal which
is defined as a static array of char. The static qualifier insures
that it exists for the entire life of the program, not just the life
of the function in which it appears.

char s[7] = "blabla";

as that would be wrong.

<snip>
if ( strcmp( "A", "A" ) == 1) printf( "That just has to be right." );


Make that "== 0". See
http://www.acm.uiuc.edu/webmonkeys/b...14.html#strcmp

Ed.


Mac


<<Remove the del for email>>
Nov 13 '05 #13


Mac wrote:
On Fri, 24 Oct 2003 11:26:49 +0000, Ed Morton wrote: <snip>
char *test(){
char *s = "blabla";
return s;
} // result is, well, not readable


The above should be fine. Are you sure you didn't instead do:

Hmm. I'd have thought that "blabla" wouldn't be guaranteed to exist
outside of test. I gather from your reply, though, that it is? Is that
because "blabla" is a constant, and not an initializer (as it is below)?


Pretty much. In the first version, s points to the area of memory where
"blabla" lives so when the function returns the value of "s" that value
still points to "blabla", while in the second the function stack
starting at location "s" gets a copy of "blabla" so when the function
returns the value of "s", it no longer points to a valid location since
the functions stack was already released. "blabla" cheerfully lives on
in memory in either case, but in the second you no longer have a pointer
to it, but instead a pointer to where a copy of it used to live. See
http://www.eskimo.com/~scs/C-faq/q6.2.html for a better general description.

Ed.
char s[7] = "blabla";

<snip>

Nov 13 '05 #14
Million of answers, can't go wrong anymore! Thank you all!

Greetings,
Rick
Nov 13 '05 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

9
30157
by: Ken | last post by:
How can I reset the initial form variables that are set with session statements when clicking on a button? I tried this but the function was not called: <?PHP function reset_form($none) { $_SESSION = array(); } ?> <form enctype="multipart/form-data" name="company_info" method="post" action="add_pic.php">
6
2191
by: Shabam | last post by:
I have a text field that's pre-filled with data. Suppose the user edits it, but decides he wants to reset the data back to the original pre-filled data, how can I do that?
22
17239
by: spike | last post by:
How do i reset a string? I just want to empty it som that it does not contain any characters Say it contains "hello world" at the time... I want it to contain "". Nothing that is.. Thanx
8
2182
by: spike | last post by:
My prygram goes through a string to find names between '\'-characters The problem is, parts of the name in sTemp remains if the new name is shorter than the old name. code --------------------------------------------------- char sTemp; char sText = "THELONGESTNAME\\samantha\\gregor\\spike\\..."; // and so on...
5
3998
by: jab3 | last post by:
(again :)) Hello everyone. I'll ask this even at risk of being accused of not researching adequately. My question (before longer reasoning) is: How does declaring (or defining, whatever) a variable **var make it an array of pointers? I realize that 'char **var' is a pointer to a pointer of type char (I hope). And I realize that with var, var is actually a memory address (or at
12
5546
by: arkobose | last post by:
my earlier post titled: "How to input strings of any lengths into arrays of type: char *array ?" seems to have created a confusion. therefore i paraphrase my problem below. consider the following program: #include<stdio.h> #define SIZE 1 int main()
3
6247
by: Crirus | last post by:
I have a big array 512*512 elements Wich is the best way to reset the array to 0 on each element? Redim without preserve, I have for loop and clear shared function Wich one is best optimised for speed? -- Cheers,
5
7228
by: bdbeames | last post by:
I have and array that I fill with elements in a function. I call it later and want to reset it so that it is empty so I can fill it with different elements and a different number of elements. How do I reset it so that there is nothing in it? I would do it before the If statements, but I'm not sure how to reset it. Could someone help? var imageArray; var image_dir; var imageNum =0;
4
1453
by: JuAn2226 | last post by:
can anyone help me to to do coding for reset and start again. i got 10 array of random number, 10 array for start time how do i reset the both array after the 10 array is filled and start filling up again for new random number again.
0
9944
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9797
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
11154
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10762
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10863
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10422
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
7977
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5807
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
6005
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.