Problem with GCC compiler
I am using Arch Linux and when I am compiling and running the following C code,
#include <stdio.h>
#include<string.h>
int main(void) {
char s1="Hello";
char s2="World";
strcat(s1,s2);
int s2_len=strlen(s2);
printf("s1 = %s, s2 = %s and length of s2 = %d.n", s1, s2, s2_len);
return 0;
}
I am getting the output:
s1 = HelloWorld, s2 = orld and length of s2 = 4.
Although the output shoud be s1 = HelloWorld, s2 = World and length of s2 = 5.
and it is the output when I am using some online IDE.
Can somebody explain me why is this happening?
string c
migrated from unix.stackexchange.com 7 hours ago
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
add a comment |
I am using Arch Linux and when I am compiling and running the following C code,
#include <stdio.h>
#include<string.h>
int main(void) {
char s1="Hello";
char s2="World";
strcat(s1,s2);
int s2_len=strlen(s2);
printf("s1 = %s, s2 = %s and length of s2 = %d.n", s1, s2, s2_len);
return 0;
}
I am getting the output:
s1 = HelloWorld, s2 = orld and length of s2 = 4.
Although the output shoud be s1 = HelloWorld, s2 = World and length of s2 = 5.
and it is the output when I am using some online IDE.
Can somebody explain me why is this happening?
string c
migrated from unix.stackexchange.com 7 hours ago
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
6
You are overflowing yours1
causing undefined behavior. The problem is with your code and not the compiler (and this should be your assumption always. The cases where compiler is wrong are extremely rare).
– Eugene Sh.
7 hours ago
add a comment |
I am using Arch Linux and when I am compiling and running the following C code,
#include <stdio.h>
#include<string.h>
int main(void) {
char s1="Hello";
char s2="World";
strcat(s1,s2);
int s2_len=strlen(s2);
printf("s1 = %s, s2 = %s and length of s2 = %d.n", s1, s2, s2_len);
return 0;
}
I am getting the output:
s1 = HelloWorld, s2 = orld and length of s2 = 4.
Although the output shoud be s1 = HelloWorld, s2 = World and length of s2 = 5.
and it is the output when I am using some online IDE.
Can somebody explain me why is this happening?
string c
I am using Arch Linux and when I am compiling and running the following C code,
#include <stdio.h>
#include<string.h>
int main(void) {
char s1="Hello";
char s2="World";
strcat(s1,s2);
int s2_len=strlen(s2);
printf("s1 = %s, s2 = %s and length of s2 = %d.n", s1, s2, s2_len);
return 0;
}
I am getting the output:
s1 = HelloWorld, s2 = orld and length of s2 = 4.
Although the output shoud be s1 = HelloWorld, s2 = World and length of s2 = 5.
and it is the output when I am using some online IDE.
Can somebody explain me why is this happening?
string c
string c
asked 7 hours ago
xyzxyz
112
112
migrated from unix.stackexchange.com 7 hours ago
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
migrated from unix.stackexchange.com 7 hours ago
This question came from our site for users of Linux, FreeBSD and other Un*x-like operating systems.
6
You are overflowing yours1
causing undefined behavior. The problem is with your code and not the compiler (and this should be your assumption always. The cases where compiler is wrong are extremely rare).
– Eugene Sh.
7 hours ago
add a comment |
6
You are overflowing yours1
causing undefined behavior. The problem is with your code and not the compiler (and this should be your assumption always. The cases where compiler is wrong are extremely rare).
– Eugene Sh.
7 hours ago
6
6
You are overflowing your
s1
causing undefined behavior. The problem is with your code and not the compiler (and this should be your assumption always. The cases where compiler is wrong are extremely rare).– Eugene Sh.
7 hours ago
You are overflowing your
s1
causing undefined behavior. The problem is with your code and not the compiler (and this should be your assumption always. The cases where compiler is wrong are extremely rare).– Eugene Sh.
7 hours ago
add a comment |
1 Answer
1
active
oldest
votes
char s1="Hello";
char s2="World";
strcat(s1,s2);
The variable declarations allocate memory for 5 characters each, plus the terminating NUL byte. Your strcat
call writes past that space, which produces undefined results.
In this case, the memory layout is probably something like this
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
After the strcat
, the result is:
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
Which gives the result you see. Note that there could be other possible results, the program could e.g. crash at the strcat
call.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
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: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54256872%2fproblem-with-gcc-compiler%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
char s1="Hello";
char s2="World";
strcat(s1,s2);
The variable declarations allocate memory for 5 characters each, plus the terminating NUL byte. Your strcat
call writes past that space, which produces undefined results.
In this case, the memory layout is probably something like this
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
After the strcat
, the result is:
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
Which gives the result you see. Note that there could be other possible results, the program could e.g. crash at the strcat
call.
add a comment |
char s1="Hello";
char s2="World";
strcat(s1,s2);
The variable declarations allocate memory for 5 characters each, plus the terminating NUL byte. Your strcat
call writes past that space, which produces undefined results.
In this case, the memory layout is probably something like this
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
After the strcat
, the result is:
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
Which gives the result you see. Note that there could be other possible results, the program could e.g. crash at the strcat
call.
add a comment |
char s1="Hello";
char s2="World";
strcat(s1,s2);
The variable declarations allocate memory for 5 characters each, plus the terminating NUL byte. Your strcat
call writes past that space, which produces undefined results.
In this case, the memory layout is probably something like this
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
After the strcat
, the result is:
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
Which gives the result you see. Note that there could be other possible results, the program could e.g. crash at the strcat
call.
char s1="Hello";
char s2="World";
strcat(s1,s2);
The variable declarations allocate memory for 5 characters each, plus the terminating NUL byte. Your strcat
call writes past that space, which produces undefined results.
In this case, the memory layout is probably something like this
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
After the strcat
, the result is:
0 1 2 3 4 5 6 7 8 9 10 11
H e l l o W o r l d
^ ^
s1 s2
Which gives the result you see. Note that there could be other possible results, the program could e.g. crash at the strcat
call.
answered 7 hours ago
ilkkachuilkkachu
3,509318
3,509318
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- 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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54256872%2fproblem-with-gcc-compiler%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
6
You are overflowing your
s1
causing undefined behavior. The problem is with your code and not the compiler (and this should be your assumption always. The cases where compiler is wrong are extremely rare).– Eugene Sh.
7 hours ago