Please Explain me the output


 
Thread Tools Search this Thread
Top Forums Programming Please Explain me the output
# 1  
Old 01-03-2008
Question Please Explain me the output

#include<stdio.h>

char *def[5]={"pqrs","rstu","tuvw","vwxyz","xyzab"};
char abc[5][5]={"abc","def","ghi","jkl","mno"};

void main()
{
char *p=(char *)def;
p=p+40;
printf("%s\n",p);
}

the output of the abve code snippet is mno...
HOW??? beats me.. please help
# 2  
Old 01-03-2008
Your code is leaping around in the data segment. No surprises.

The give away is you have to cast from "def" showing you are trying to cheat the compiler.

As for the "40", it shows you have no concern for any array bounds.
# 3  
Old 01-03-2008
porter i know the code is playing with data segment. i didnt write this code. i just saw it on a "Test ur C skill book" and dint quite understand how the output was mno.
Can you please explain/justify the output???
# 4  
Old 01-03-2008
Quote:
Originally Posted by vikashtulsiyan
Can you justify the output???
I thought I just did.
# 5  
Old 01-03-2008
you didnt porter. you just commented how bad the code is... Or maybe am too dumb to understand how you explained the output.

let me ask my question straight.

when i increment p by forty how is it poingting to another last element of char array abc. there is no relation between p and abc.
# 6  
Old 01-03-2008
Quote:
Originally Posted by vikashtulsiyan
there is no relation between p and abc.
Yes there is, "p" was assigned point to "def" which is in the data segment, "abc" is also in the data segment, and given the location in the code is likely to immediately follow it in the data segment.

However there is no guarantee on the distance between abc and def, as this may change on compiler, alignment and pointer sizes.
# 7  
Old 01-03-2008
I agree with porter completely, i don't understand why people think that they are testing C skills by asking this question, and other big mistake is stating that this is the exact answer.

as far as the code is concerned
to understand the consequence of the statement p = p + 40,a person need to know that p would be pointing to a memory location 40 bytes ahead

but using this knowledge, no body can predict the output.How can somebody state the output is "mno" Smilie

if he/she state's that while using compiler X on operating system Y on Z bit machine we may get the output "mno" is acceptable.

I am sorry man, please don't take it as a offense

Rakesh UV
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Explain the output of swap -s and swap -l

Hi Solaris Folks :), I need to calculate the swap usage on solaris server, please let me understand the output of below swap -s and swap -l commands. $swap -s total: 1774912k bytes allocated + 240616k reserved = 2015528k used, 14542512k available $swap -l swapfile dev swaplo... (6 Replies)
Discussion started by: seenuvasan1985
6 Replies

2. UNIX for Dummies Questions & Answers

netstat -an output, pls. explain..

Hi, I have old SCO O/S. System keeps crashing. I made lot of changes to kernel but so for nothing helped. I wrote a script which takes netstat -an output every one minute. I saw some thing right before the system crashed. Not sure if this means anything.. uname -a SCO_SV djx2 3.2... (2 Replies)
Discussion started by: samnyc
2 Replies

3. Solaris

Help Explain the output of probe-scsi

Can anyone explain the output of probe-scsi command below? ok probe-scsi Target 0 Unit 0 Disk SEAGATE ST373207LSUN72G 045A Target 1 Unit 0 Disk SEAGATE ST373207LSUN72G 045A I have no idea what it means. I tried to read online but I still did not understand. I appreciate... (6 Replies)
Discussion started by: cjashu
6 Replies

4. Shell Programming and Scripting

need explain

Dear unix team i'm user for a system build on unix system ,so we need to run a lot of scripts not in one sission but every script on the associated terminal , so the script name = the name of the terminal which will run this script on it . and someone create a batch that make as below : 1- but... (4 Replies)
Discussion started by: fofatoti
4 Replies

5. Shell Programming and Scripting

Can anyone please explain this??

cur_fy=`grep "CONSOL" $GLDATA/parms/cur_fiscalyear.lis | awk '{print $2}' Here i don't understand "CONSOL" and awk'{print$2) Please help me out cur_fiscalyear.lis contents : DL 2011 MOL 2011 MV 2011 SF 2010 CONSOL 2011 MVU 2011 (3 Replies)
Discussion started by: Diddy
3 Replies

6. Programming

Explain output

#include<signal.h> #include<stdio.h> #include<stdlib.h> sigcatcher() { printf("pid=%d",getpid()); signal(SIGINT,sigcatcher); //line1 } main() { int ppid; signal(SIGINT,sigcatcher); if(fork()==0) { sleep(5); ppid=getppid(); while(1)... (4 Replies)
Discussion started by: gol007
4 Replies

7. Shell Programming and Scripting

can any one explain this example

hi all i have an example i want one help me to understand cause i tried to test it but almost fail and i don't know how can i solve this problem " the main idea to read from two files and replace something from one to another " but i don't understand why it fail all time $ cat main.txt... (4 Replies)
Discussion started by: maxim42
4 Replies

8. UNIX for Dummies Questions & Answers

Please explain this

if then echo "Syntax: $0 <sid> <COLD/HOT> <DEST>" exit fi if --------------what does this mean??? echo "Syntax: $0 <sid> <COLD/HOT> <DEST>"---pls explain this as well (2 Replies)
Discussion started by: appsdba.nitin
2 Replies

9. Shell Programming and Scripting

Please can any one explain this ${0##/}

I did not understand what is ${0##/} PGM=${0##/} TMP=/tmp/${PGM}.$$ Please explain me. (2 Replies)
Discussion started by: gadege
2 Replies

10. UNIX for Dummies Questions & Answers

Explain the output of the command....

Explain the output of the command “sort -rfn file1 | more” (1 Reply)
Discussion started by: wickbc
1 Replies
Login or Register to Ask a Question