Προς το περιεχόμενο

Προγραμματισμός με δείκτες


Miky-Maous

Προτεινόμενες αναρτήσεις

Δημοσ.

Στον παρακάτω κώδικα η συνάρτηση func2 θα πρέπει να μου επιστρέφει έναν πίνακα ακεραίων με στοιχεία τους αριθμούς από το a μέχρι και το b, παρόλαυτα για κάποιο λόγο δεν λειτουργεί. Ο compiler είναι Bloodshed Dev-C++ σε Windows.

 

#include <stdio.h>

#include <stdlib.h>

char *func(char *s, int n)

{

char *s2;

int i;

s2=(char *) malloc(n+1);

for (i=0;i<n;i++)

s2=s;

s2[n]='\0';

return s2;

}

int *func2(int a, int B)

{

int *s2;

int i;

s2 = (int *) malloc((b-a+1)*sizeof(int));

for (i=a;i<=b;i++)

{

s2[i-a]=i;

}

return s2;

}

 

main()

{

char *s = "Hello";

printf("%s\n",func(s,2));

printf("%d",func2(3,7));

getchar();

}

 

Για κάποιο λόγο επίσης οπώς είδα στην προεπισκόπηση ο κώδικας στο μήνυμα εμφανίζεται εναλλάξ από μικρά σε κεφαλαία μετά από καθε =

Δημοσ.

Βαριέμαι να ελεγξω τις συναρτήσεις έτσι όπως τις έκανες paste στο forum αλλά το print που κάνεις δεν κάνει dump τον πίνακα..

Δημοσ.

Εχεις δικιο απλα κι εγω τωρα μαθαινω και ασχολουμαι με forum και προγραμματισμο. Παντως μου φαινεται οτι το λαθος ειναι στην printf η οποια δεν πρεπει να ειναι καταλληλη για επιστροφη int αλλα μονο για string

Δημοσ.
>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

char *func(const char *str, size_t n) {
   char *p = malloc(n+1);
   if(p) {
       strncpy(p, str, n);
       p[n] = 0;
   }
   return p;
}

int *func2(int a, int  {
   int *d;
   size_t n = b - a + 1;
   assert(b >= a);
   if(d = malloc(n * sizeof *d))
       for(i = 0; i < n; d[i] = a + i, i++);
   return d;
}

int main(void) {
   char *str = func("Hello", 2);
   char *d   = func2(3, 7);
   size_t i;
   if(str)
       printf("str = '%s'\n", str);
   for(i = 0; d && i < 5; i++)
       printf("d[i] = %d\n", d[i]);
   free(str);
   free(d);
   return 0;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...