Sponsored Content
Top Forums Programming Newline in ANSI-C standard functions Post 303020110 by yifangt on Friday 13th of July 2018 01:13:10 PM
Old 07-13-2018
unclear with memset() with strcpy()/strncpy()

Thank you so much for your patience with my basics still, as I feel getting better to understand more.
strncpy doesn't want the size of the origin string: It wants the size of the destination buffer. ...... If you'd used strcpy, you would have been safe.
To see how things are working in the memory in order to understand those garbage left, I got error in the Block Two of following code:***buffer overflow detected ***: ./memset01 terminated
Code:
#include <stdio.h>
#include <string.h>

//More about that some said don't use strcpy() but use strncpy()!!!
int main () {
   char str1[128];
   char str2[256];
   int len1, len2;
   len1=strlen("this is string1");
   len2=strlen("That is test string2");
   printf("Length of str1[128]: %d\n", len1);
   printf("Length of str2[256]: %d\n\n", len2);

   strcpy(str1, "this is string1");
   strcpy(str2, "That is test string2");

   printf("Length of strlen(str1): %lu\n", strlen(str1));
   printf("Length of strlen(str2): %lu\n\n", strlen(str2));

/*Start of block One***********************/
   memset(str1, 'X', strlen(str1)+113); // fills the first 128 bytes of the memory area pointed to by str1 with the constant byte 'X'.
   memset(str2, 'X', strlen(str2)+108); // fills the first 128 bytes of the memory area pointed to by str2 with the constant byte 'X'.

   strncpy(str1, "this is string1", len1);
   strncpy(str2, "That is test string2", len2);
   puts("___Line 1___:");
   puts(str1);
   puts("___Line 2___:");
   puts(str2);
   printf("------------------------------------------------------------------\n");
/*End of block One***********************/

/*Start of block Two***********************/
   memset(str1, 'X', strlen(str1)+113); //fills the first 128 bytes of the memory area pointed to by str1 with the constant byte 'X'.
   memset(str2, 'X', strlen(str2)+108); //fills the first 128 bytes of the memory area pointed to by str2 with the constant byte 'X'.
   strcpy(str1, "this is string1");
   strcpy(str2, "That is test string2");

   puts("___Line 1___:");
   puts(str1);
   puts("___Line 2___:");
   puts(str2);
   printf("------------------------------------------------------------------\n");
/*End of block Two***********************/
   return(0);
}

If I switch the two blocks, there is no buffer overflow for the memset().
What is going on in the memory? Thanks!

Last edited by yifangt; 07-16-2018 at 12:00 PM.. Reason: typos
 

10 More Discussions You Might Find Interesting

1. Programming

Ansi C

Dear All, I have to develope some C functions in Unix for a Magic program. The original MSE code which compiles the attached C program uses a +z option, but the cc compiler don't know this. The complete command in the compiler script is 'cc -c -Aa +z myfile.c'. The warning message is 'The -z... (4 Replies)
Discussion started by: Frankie
4 Replies

2. Programming

ANSI C vs POSIX

can somebody explain about the ANSI C vs POSIX. say i was using open and fopen, i know that open is POSIX, and fopen is ANSI C. i read that that POSIX is a system call and ANSI C is like a standard library function. wouldn't the fopen function has to call on open function anyway to open any kind... (2 Replies)
Discussion started by: bb00y
2 Replies

3. Shell Programming and Scripting

Convert file from Unix - ANSI to PC - ANSI

Hi, I am creating a file in Unix using a shell script. The file is getting created in the Unix - ANSI format. My requirement is to convert it to the PC - ANSI format. Can anyone tell me how to do this? Thanks, Sunil (0 Replies)
Discussion started by: ssmallya
0 Replies

4. Programming

using c++ and c standard I/O functions

Is it not a healthy practice to mix C and C++ standard I/O functions together e.g. string name; // this is a declared instance of the string class in C++ printf("\nPlease enter your name: "); cin >> name; I did something similar in a program Im designing, and used it several... (1 Reply)
Discussion started by: JamesGoh
1 Replies

5. Programming

Standard UNIX functions

Hi everybody, first of all i apologize if my thread's title doesn't make much sense,but i coudn't find a more appropriate name :) Then i apologize about my question,which probably will sound trivial for you :) :) I am working on a program which is being tested in Linux but the final target is... (2 Replies)
Discussion started by: Zipi
2 Replies

6. Shell Programming and Scripting

standard error to standard out question

Hi there how can i get the result of a command to not give me its error. For example, on certain systems the 'zfs' command below is not available, but this is fine becaues I am testing against $? so i dont want to see the message " command not found" Ive tried outputting to /dev/null 2>&1 to no... (5 Replies)
Discussion started by: hcclnoodles
5 Replies

7. UNIX for Dummies Questions & Answers

Redirect Standard output and standard error into spreadsheet

Hey, I'm completely new at this and I was wondering if there is a way that I would be able to redirect the log files in a directories standard output and standard error into and excel spreadsheet in anyway? Please remember don't use too advanced of terminology as I just started using shell... (6 Replies)
Discussion started by: killaram
6 Replies

8. Shell Programming and Scripting

Standard out and standard error

I need to run a cronjob and in the cronjob I execute a script that if there is an error produces standard error so I do /RUNMYSCRIPT 2> mylogfile.log However, if it runs correctly, I don't get a standard error output, I get a standard out output. How do I redirect both standard error and... (2 Replies)
Discussion started by: guessingo
2 Replies

9. Programming

why the implementatoin of Bakery algorithm in ANSI C does not work in ANSI C

I follow the description of wiki (Lamport's bakery algorithm - Wikipedia, the free encyclopedia), then implement that algorithm in C, but it doesn't work, Starving is still here, is the implementation worry? Only print out: Thread ID: 0 START! Thread ID: 0 END! Thread ID: 0 START!... (2 Replies)
Discussion started by: sehang
2 Replies

10. Shell Programming and Scripting

How to execute functions or initiate functions as command line parameters for below requirement?

I have 7 functions those need to be executed as command line inputs, I tried with below code it’s not executing function. If I run the ./script 2 then fun2 should execute , how to initiate that function I tried case and if else also, how to initiate function from command line if then... (8 Replies)
Discussion started by: saku
8 Replies
PROP_STRING(3)						   BSD Library Functions Manual 					    PROP_STRING(3)

NAME
prop_string, prop_string_create, prop_string_create_cstring, prop_string_create_cstring_nocopy, prop_string_copy, prop_string_copy_mutable, prop_string_size, prop_string_mutable, prop_string_cstring, prop_string_cstring_nocopy, prop_string_append, prop_string_append_cstring, prop_string_equals, prop_string_equals_cstring -- string value property object LIBRARY
Property Container Object Library (libprop, -lprop) SYNOPSIS
#include <prop/proplib.h> prop_string_t prop_string_create(void); prop_string_t prop_string_create_cstring(const char *cstring); prop_string_t prop_string_create_cstring_nocopy(const char *cstring); prop_string_t prop_string_copy(prop_string_t string); prop_string_t prop_string_copy_mutable(prop_string_t string); size_t prop_string_size(prop_string_t string); bool prop_string_mutable(prop_string_t string); char * prop_string_cstring(prop_string_t string); const char * prop_string_cstring_nocopy(prop_string_t string); bool prop_string_append(prop_string_t str1, prop_string_t str2); bool prop_string_append_cstring(prop_string_t string, const char *cstring); bool prop_string_equals(prop_string_t str1, prop_string_t str2); bool prop_string_equals_cstring(prop_string_t string, const char *cstring); DESCRIPTION
The prop_string family of functions operate on a string value property object type. prop_string_create(void) Create an empty mutable string. Returns NULL on failure. prop_string_create_cstring(const char *cstring) Create a mutable string that contains a copy of cstring. Returns NULL on failure. prop_string_create_cstring_nocopy(const char *cstring) Create an immutable string that contains a reference to cstring. Returns NULL on failure. prop_string_copy(prop_string_t string) Copy a string. If the string being copied is an immutable external C string reference, then the copy is also immutable and references the same external C string. Returns NULL on failure. prop_string_copy_mutable(prop_string_t string) Copy a string, always creating a mutable copy. Returns NULL on failure. prop_string_size(prop_string_t string) Returns the size of the string, not including the terminating NUL. If the supplied object isn't a string, zero is returned. prop_string_mutable(prop_string_t string) Returns true if the string is mutable. If the supplied object isn't a string, false is returned. prop_string_cstring(prop_string_t string) Returns a copy of the string's contents as a C string. The caller is responsible for freeing the returned buffer. In user space, the buffer is allocated using malloc(3). In the kernel, the buffer is allocated using malloc(9) using the malloc type M_TEMP. Returns NULL on failure. prop_string_cstring_nocopy(prop_string_t string) Returns an immutable reference to the contents of the string as a C string. If the supplied object isn't a string, NULL is returned. prop_string_append(prop_string_t str1, prop_string_t str2) Append the contents of str2 to str1, which must be mutable. Returns true upon success and false otherwise. prop_string_append_cstring(prop_string_t string, const char *cstring) Append the C string cstring to string, which must be mutable. Returns true upon success and false otherwise. prop_string_equals(prop_string_t str1, prop_string_t str2) Returns true if the two string objects are equivalent. prop_string_equals_cstring(prop_string_t string, const char *cstring) Returns true if the string's value is equivalent to cstring. SEE ALSO
prop_array(3), prop_bool(3), prop_data(3), prop_dictionary(3), prop_number(3), prop_object(3), proplib(3) HISTORY
The proplib property container object library first appeared in NetBSD 4.0. BSD
January 21, 2008 BSD
All times are GMT -4. The time now is 02:16 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy