I am writing a programme..and it's so simple but I get this warning all the time.
warning format ‘ d’ expects type ‘int ’ but argument 2 has type ‘char *’
What could have gone wrong?
I am writing a programme..and it's so simple but I get this warning all the time.
warning format ‘ d’ expects type ‘int ’ but argument 2 has type ‘char *’
What could have gone wrong?
The warning explains itOriginally Posted by zel
Basically, you probably wrote something like this:
So the compiler complains that the argument corresponding to %d is not an integer. How to fix this depends on what you are trying to do.Code:#include <stdio.h> int main(int argc, char *argv[]) { printf("My name is %d\n", argv[0]); return 0; }
Look up a C++ Reference and learn How To Ask Questions The Smart WayOriginally Posted by Bjarne Stroustrup (2000-10-14)
Ok. How about this one?
My warnings are:
In function ‘main’:
line 11: warning: assignment makes integer from pointer without a cast
line 12: warning: assignment makes integer from pointer without a cast
line 20: warning: assignment makes integer from pointer without a cast
line 21: warning: assignment makes integer from pointer without a cast
the purpose of the program is this:Code:1 #include <stdio.h> 2. #include <string.h> 3. #include <stdlib.h> 4. 5. int main (int argc,char *argv[]){ 6. 7. char x,y; 8. char *pX, *pY; 9. char str1[20],str2[20]; 10. 11. x = (char *) malloc(20* sizeof(char) ); 12. y = (char *) malloc(20* sizeof(char) ); 13. 14. scanf("%19s",str1); 15. scanf("%19s",str2); 16. 17. pX=&x; 18. pY=&y; 19. 20. x=&str1; 21. y=&str2; 22. 23. printf("x= %c and y= %c", *pX,*pY); 24. 25. return (0); 26. 27.}
Write a program which:
-declares 2 variables of pointer-to-character-type
-holds dynamic memory for 20 positions of memory for each variable
-initializes the variables by reading 2 strings from keyboard
-prints the values of the 2 variables on screen.
What am I doing wrong? Can u help me understand it?
Last edited by zel; 09-07-2010 at 11:58 AM.
Well, why are you trying to assign the return value of malloc to a non-pointer variable? Likewise, why are you trying to assign the address of an array to a non-pointer variable?
Look up a C++ Reference and learn How To Ask Questions The Smart WayOriginally Posted by Bjarne Stroustrup (2000-10-14)
so it has to be:
[CODE][
pX = (char *) malloc(20* sizeof(char) );
pY = (char *) malloc(20* sizeof(char) );
/CODE]
right?
in the next lines should it also be:
?Code://pX=&x; //pY=&y; pX=&str1; pY=&str2;
how i'm going to print the value of str1 and str2 by giving it in the variables pX and pY ?
You only need pX and pY. After you have allocated space with malloc and assigned the return values of the malloc calls to them, they would point to the first character of a dynamic array of char, which you can thus use as a string.
Remember to free what you malloc.
(Of course, if you are always allocating exactly 20 characters, then you will find that dynamic memory allocation is quite unnecessary.)
Last edited by laserlight; 09-07-2010 at 12:29 PM.
Look up a C++ Reference and learn How To Ask Questions The Smart WayOriginally Posted by Bjarne Stroustrup (2000-10-14)
ok I also added 2 free.
I'm confused at the 2nd part of your answer. you mean I don't have to use str1 and str2 but pX and pY instead?Code:free(pX); free(pY);
ps.sorry if my English is bad
Yes.Originally Posted by zel
Look up a C++ Reference and learn How To Ask Questions The Smart WayOriginally Posted by Bjarne Stroustrup (2000-10-14)
char *px = malloc(20 * sizeof(char));
ok here's another problem. I want to copy the first N characters from a string1 to a string2 and erase the rest characters of string1 BUT without using any string function from <string.h>.
So if
string1= bananas
string2=boat
and N=2
at the end it will be:
string1=bo
string2=boat
how can I make this happen?
I found the length of string1 and then I want to swap the substring with the string1..But I'm stuck here.Any ideas?
Code:void copy( char* str1,char* str2, int N) { int i,len1; char *temp; for (i=0; str1[i] != '\0'; i++){ len1= i; } for (i=0;i<N;i++){ *temp=*str1; *str1=*str2 *str2=temp; } printf("%19s\n",str1); }
Well, if you regard your code, temp is uninitialized. Points to neverland.
But let's formulate an algorithm for you want to do and start from there:
Truncate string 1.
Copy N characters from string 2 to string 1.
Null terminate string 1 (otherwise it won't be a string.)
Try that.
Also, printf does not need the size of the string to print it. So %19s should be %s.
You might want to look at the documentation of strncpy() for inspiration. Pay attention to it's function parameters, and description of how it works. This is what you are trying to implement.
Have fun with reverse engineering.