Reputation: 4247
Googled around and can't find out what's going wrong here, the pointer gets passed correctly but it's not working.
The program is supposed to find the length of the character array/string.
What's wrong here? Just always give length of zero!
#include <stdio.h>
#include <stdbool.h>
int stringlength(char *); // Declare function in the beggining (because C)
main()
{
char testString[100]; // Character array where we'll store input from command line (unsafely)
char *arrayPointer; // Pointer that will point to array so it can be passed to function
int length; // Integer for length of string
printf("Please enter in a string: \n");
scanf("s", &testString[0]); // Get input
arrayPointer = &testString[0]; // Point the pointer to the array
printf("Pointer to array %p\n-----------------\n", arrayPointer); // Output pointer
stringlength(arrayPointer); // And use the function
printf("Length is %d\n", length); // Output the length of the string...
}
stringlength(char *stringArray)
{
int i = 0; // Counter variable
int length = 0; // Length variable
bool done = false; // Boolean for loop
while(!done)
{
printf("Character is %c\n", stringArray[i]); // Output character
printf("Memory location %p\n", &stringArray[i]); // Output memory location of character
if(stringArray[i] == '\x00') // If the current array slot is a null byte we've reached the end of the array
{
done = true; // Null byte found, we're all done here
return length;
} else {
length++; // Not a null byte so increment length!
}
i++; // Counter for moving forward in array
}
}
Output of this is:
mandatory@MANDATORY:~/Programming/C$ ./a.out
Please enter in a string:
testing
Pointer to array 0x7fffc83b75b0
-----------------
Character is
Memory location 0x7fffc83b75b0
Character is
Memory location 0x7fffc83b75b1
Length is 0
Upvotes: 0
Views: 148
Reputation: 224864
You have a few problems:
main
should be declared to return int
:
int main(void)
Your scanf
format is wrong. Use:
scanf("%s", &testString[0]);
The signature in your implementation of stringlength()
doesn't match the prototype. Make sure it's:
int stringlength(char *stringArray)
stringlength()
doesn't return the length. Add:
return length;
at the end of that function.
You don't assign to length
in main()
. Change the call to stringlength()
to actually use the return value:
length = stringlength(arrayPointer);
main()
should return something. Probably 0
. Add:
return 0;
at the end of main()
.
Upvotes: 3
Reputation: 14786
I think you want
scanf("s", &testString[0]); // Get input
to be
scanf("%s", &testString[0]); // Get input
Upvotes: 2