Scanf() string pointer problem


 
Thread Tools Search this Thread
Top Forums Programming Scanf() string pointer problem
# 8  
Old 11-14-2013
Please show your complete code.
# 9  
Old 11-14-2013
Here it is:
Code:
#include <stdio.h>
#include <stdlib.h>

struct Student {
    int studentNumber;
    int phoneNumber;
    char *studentName;        //Line 7
//    char studentName[20]; //Line 8
};

int main()
{
    struct Student *list;
    int numOfStudents;
    int x;
    int studentCounter = 1;
    
    printf("\nEnter the number of students you would like to input: ");
    scanf("%d", &numOfStudents);
    
    list = malloc(sizeof(list) * numOfStudents);
    
    for (x = 0; x < numOfStudents; x++) {
    printf("\nEnter name for student #%d: ", studentCounter);
        list[x].studentName=malloc(20);
    scanf("%s", list[x].studentName);        //Line 25
    printf("Enter student number for student #%d: ",
           studentCounter);
    scanf("%d", &list[x].studentNumber);            //Line27
    printf("Enter phone number for student #%d: ",
           studentCounter);
    scanf("%d", &list[x].phoneNumber);            //Line 29
    studentCounter++;
    }

    for (x = 0; x < numOfStudents; x++) {
    printf("%s, #%d, %d: \n", list[x].studentName, list[x].studentNumber, list[x].phoneNumber);
//        free(list[x].studentName);                 //Line 35
    }
for (x = 0; x < numOfStudents; x++) { free(list[x].studentName); }  //Line 37
    free(list);                        //Line 38
    return 0;
}

Thanks again!
# 10  
Old 11-14-2013
This was subtle. It took me a while to spot it.

sizeof(list)

What is list? A pointer.

Remember from your other thread, what you get when you do sizeof(pointer) ? It takes you completely literally and gives you the size of the pointer. Which means you only allocate 4 or 8 bytes for the size of each index, and end up going way beyond the end when you loop.

Code:
sizeof(struct Student)

This User Gave Thanks to Corona688 For This Post:
# 11  
Old 11-14-2013
That was really subtle and, fundamental, too. I can't get it until you pointed out!
This bugged me sooooo much, and I had thought my understanding is totally wrong. Fortunately I am on the right track, not that far away from right, at least.
Thank you very much again!
This User Gave Thanks to yifangt For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

String pointer does not work

Hello, I am trying to reverse complement one string and reverse another (NO complement!), both with pointer. My code compiled without error, but did not do the job I wanted. #include <stdio.h> #include <stdlib.h> #include <zlib.h> #include "kseq.h" // STEP 1: declare the type of file... (5 Replies)
Discussion started by: yifangt
5 Replies

2. Programming

How i use pointer as a string in c programing?

I'm newbie learner. My all friend use windows just only me use linux. so i can't solve any problem by myself. i need a solution. how can i use pointer as a string. #include<string.h> #include<stdio.h> int main() { char *s='\0'; gets(s); puts(s); return 0; } This code work on... (6 Replies)
Discussion started by: raihan004
6 Replies

3. Programming

pointer problem

Does anyone know? int x = 1; int *p = &++x; //ok ! int *q = &x++; //gives an error :O why the first pointer is ok but the second is an error? (13 Replies)
Discussion started by: nishrestha
13 Replies

4. Programming

segfault in pointer to string program

hello all, my question is not about How code can be rewritten, i just wanna know even though i am not using read only memory of C (i have declared str) why this function gives me segfault :wall:and the other code executes comfortably though both code uses same pointer arithmetic. ... (4 Replies)
Discussion started by: zius_oram
4 Replies

5. Programming

pass a pointer-to-pointer, or return a pointer?

If one wants to get a start address of a array or a string or a block of memory via a function, there are at least two methods to achieve it: (1) one is to pass a pointer-to-pointer parameter, like: int my_malloc(int size, char **pmem) { *pmem=(char *)malloc(size); if(*pmem==NULL)... (11 Replies)
Discussion started by: aaronwong
11 Replies

6. Programming

String and pointer problem

i am having a string like " X1 " ---> string lenght is 30 I have stored this to a chararry . ref so here ref = " X1 " now i trim the left space by my function . Si the string now becomes "X1 " ---> string lenght is 15... (3 Replies)
Discussion started by: arunkumar_mca
3 Replies

7. Programming

pointer problem

could any one tell why the following is showing segmentation fault while using **ptr but working fine using **a #include<stdio.h> ... (1 Reply)
Discussion started by: useless79
1 Replies

8. Programming

problem with scanf

hi all! i've written a simple c program: #include<stdio.h> #include<stdlib.h> int main() { int a; char b; char c; ... (4 Replies)
Discussion started by: mridula
4 Replies

9. Programming

Problem with function which reutrns pointer to a value

i have a function: char *pcCityIdToCountryName(ADMIN_DB_DATA *pstHEader, unit uiCityID) this returns a pointer to CountryName if cityId is given. to retrieve countryname i give: char *CountryName; CountryName = pcCityIdToCountryName(..................); but when i compile it is giving :... (5 Replies)
Discussion started by: jazz
5 Replies

10. Programming

Scanf problem under LINUX...

I have a problem reading characters from keyboard with the scanf function. Here there is a little piece of code: #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> /* The last 3 libraries are included because in the real program I use some... (4 Replies)
Discussion started by: robotronic
4 Replies
Login or Register to Ask a Question