hi people,

i am having some problems, perhaps understanding about how dynamic memory allocation works with pointers and arrays.

Im trying to get the user to input the size of the string in my program and allocates a certain amount of memory to hold the string of the size.

Next, i am going to ask the user to input a string which must consists of only M, U, I. Im going to put that into my input array.

The problem now is how am i going to reference the memory pointer to the input array ?

Also im having a problem with functions too. My isaMUstring function has to return a 1, if the user input correctly ( only M, U, I) and a 0 if otherwise. I can't seem to get the concept of getting the return value of the function to work in my main function.

If i can get the the return value of my function, i am able to perform other task like if the function return a 1, i would print "Correct", if otherwise, i would print "Incorrect".

I have tried

if( isaMUstring( 1 ) ){

do someting}

in the main.

but it doesn't work.

Could someone offer some help on the above 2 problems?

Below is a sample of my code.

Thanks in advance.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int isaMUstring( const char *string );




int main(){

	int size;
	char input[20];

	char *ptr;


	printf("Enter the size of string.");
	scanf("%d",&size);

	ptr = (char *)malloc((size +1) * sizeof(char *));

	

	if( ptr) {

	printf("Enter a character string(consist of 'M', 'I', 'U' only) :\n");
	scanf("%s",&input);


	isaMUstring( input );

	}

	return 0;
}

int isaMUstring( const char *string ) {


	const char *cha1 = "M";
	const char *cha2 = "I";
	const char *cha3 = "U";
	int a;

	a = 0;

	if( strpbrk( string, cha1) != NULL) {
		a += 1;
	}
	if( strpbrk( string, cha2) != NULL) {
		a += 1;
	}
	if( strpbrk( string, cha3 ) != NULL) {
		a += 1;
	}

	if( a == 3 ) {

		printf("Correct\n");// return 1;
	}
	else {
		printf("Wrong\n");//return 0;
	}

}

cross posted in : http://cboard.cprogramming.com/newthread.php?do=newthread&f=4#

<< moderator edit: fixed code tags -- and thanks for mentioning the cross-post >>

Recommended Answers

All 3 Replies

I think strspn may be a better choice for your validator.

First you ask for the size of the array, and that was fine. Then you want to allocate space to a pointer, adding one to make room for the terminating null. Then use the pointer much like an array.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int isaMUstring( const char *text )
{
   return strlen(text) == strspn(text, "MIU");
}

int main()
{
   int size;
   char *input;

   printf("Enter the size of string.");
   scanf("%d", &size);

   input = malloc(size + 1);
   if ( input )
   {
      printf("Enter a character string(consist of 'M', 'I', 'U' only) :\n");
      scanf("%s", input);

      if ( isaMUstring( input ) )
      {
         puts("Correct");
      }
      else
      {
         puts("Wrong");
      }
   }
   return 0;
}

Note that using scanf with %s (no specified size) is not a good idea. But the fixes bring other issues into this, so I'll pass on stuff like that for now. [edit]Or this snippet or two may be useful.

Wouldn't it be safer to use fgets() rather then scanf()?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.