Sponsored Content
Full Discussion: String pointer does not work
Top Forums Programming String pointer does not work Post 302886308 by yifangt on Thursday 30th of January 2014 02:40:39 PM
Old 01-30-2014
Assigning a pointer does not assign its contents. I had thought I understand this, but actually I do not! Here is another example I thought I understood, but I am so unsure even it compiles fine and runs well as I expected.
Code:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//_____________Version 1_______________
void *strrev1(char* begin){
    char temp;
    char* end;
    end = begin + strlen(begin)-1;

    while(end>begin){
        temp = *end;
        *end = *begin;
        *begin = temp;
        end--;
        begin++;
    } 
}

//_____________Version 2_______________
char *strrev2( char *s)
  {
  char  c;
  char* s0 = s - 1;
  char* s1 = s;
 
  /* Find the end of the string */
  while (*s1) ++s1;
 
  /* Reverse it */
  while (s1-- > ++s0)
    {
    c   = *s0;
    *s0 = *s1;
    *s1 =  c;
    }
 
  return s;
  }

//_____________Version 3_______________
char *strrev3(char* seq){
  if( seq == NULL || !(*seq) ) 
            return NULL;

    int i, j = strlen(seq)-1;
    char *seq_rv;

    seq_rv = malloc(sizeof(char) * (j+1));

   for(i=0; j>=0; i++, j--) 
        *(seq_rv+i) = *(seq+j);

    return seq_rv;
//    free(seq_rv);                        //Line 57: Is this needed?
}

int main(){
    char *string, *copy1, *copy2, *copy3;            //using pointer for strings
    string=malloc(sizeof(char)*100);
    copy1=malloc(sizeof(char)*100);
    copy2=malloc(sizeof(char)*100);
    copy3=malloc(sizeof(char)*100);

 scanf("%s",string);
    strcpy(copy1, string);
    strcpy(copy2, string);
    strcpy(copy3, string);

    strrev1(string);

    printf("\n%s\n", copy1);
    printf("%s\n", string);
    printf("%s\n", strrev2(copy2));
    printf("%s\n", strrev3(copy3));

free(string);
free(copy1);
free(copy2);
free(copy3);

return 0;

}

The first two functions are adapted from stackoverflow, and the third one by myself. Now my questions are:
1)Both strrev1() and strrev2() reverse the string in place, but strrev1() does not have return value as the latter which returns a pointer; I tried to integrate to my original program for seq->qual.s, neither one worked. Why?
2) strrev3() malloc memory and has return value too. Does it take double amount of memory as compared with strrev2()? If I have 100 millions of sequence(Yes, that's normal with my files!) Then replace the original string in place would be a good idea, isn't it?
3) When malloc is used in function with returned value, should I free the memory in the function after the value is returned (Line 57) ? Memory should automatically be released on the stack once the function call is done, is this right?

Last edited by yifangt; 02-01-2014 at 10:00 AM.. Reason: typo
 

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. Solaris

string extraction won't work. Why?

#!/usr/bin/ksh set -x testfile=my.test.file.flag echo ${testfile: (-4)} #/home/maldohe/scripts/spawn1& sleep 3 echo myspawn is now ending exit Background: I am trying to extract the word flag from anf given file name. This is a demo script that I am working on to fix a production issue.... (8 Replies)
Discussion started by: Harleyrci
8 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. UNIX for Dummies Questions & Answers

Counting vowels in string. "Comparison pointer-integer".

I'm trying to write a programme which scans strings to find how many vowels they contain. I get an error saying that I'm trying to compare a pointer and an integer inif(*v == scanme){. How can I overcome this ? Also, the programme seems to scan only the first word of a string e.g.: if I type "abc... (1 Reply)
Discussion started by: fakuse
1 Replies

6. 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

7. Programming

Scanf() string pointer problem

I have a problem with scanf() for string pointer as member of a struct. #include <stdio.h> #include <stdlib.h> struct Student { int studentNumber; int phoneNumber; char *studentName; //line 7 // char studentName; //line 8 }; int... (10 Replies)
Discussion started by: yifangt
10 Replies

8. Shell Programming and Scripting

Why does bc work with 'here string' and not via pipe in this example?

Hi! I actually got it running, but I still would like to understand, why and how, since I am a beginner in bash scripting. I Need floating numbers and thus use bc in my bash script. Here it is: #!/bin/bash num1="10^-15" | bc -l #power function piped to bc - DOES NOT WORK echo $num1... (4 Replies)
Discussion started by: McHale
4 Replies

9. Shell Programming and Scripting

How to extract work in line string.?

Hello all, Soon I will be receiving a new file. I've asked the source system to put "TRAILER.1+0000007+1" for the trailer to indicate full receipt of file. I need to know how to separate TRAILER so I can use it in a if statement. I used the tail command but not sure how to incorporate awk or... (11 Replies)
Discussion started by: pone2332
11 Replies

10. UNIX for Beginners Questions & Answers

C shell concatenate string doesn't work

I have the following code: #!/bin/csh clear set cloud_file="/home/labs/koren/davidsr/general_scripts/MFP_10_PP_Parmas.txt" # to fill set mie_tables_dir='/home/labs/koren/davidsr/SHDOM_MAIN/MIE_TABLES/non_polo_wave_0.7_water_50R_s0.5_e25_max_70.mie' # to fill set prp_dir='${pp_dir}/pp_prp/'... (2 Replies)
Discussion started by: student_wiz
2 Replies
XmRepTypeRegister(library call) 										   XmRepTypeRegister(library call)

NAME
XmRepTypeRegister -- A representation type manager function that registers a representation type resource SYNOPSIS
#include <Xm/RepType.h> XmRepTypeId XmRepTypeRegister( String rep_type, String *value_names, unsigned char *values, unsigned char num_values); DESCRIPTION
XmRepTypeRegister registers a representation type resource with the representation type manager. All features of the representation type management facility become available for the specified representation type. The function installs a forward type converter to convert string values to numerical representation type values. When the values argument is NULL, consecutive numerical values are assumed. The order of the strings in the value_names array determines the numerical values for the resource. For example, the first value name is 0 (zero); the second value name is 1; and so on. If it is non-NULL, the values argument can be used to assign values to representation types that have nonconsecutive values or have dupli- cate names for the same value. Representation types registered in this manner will consume additional storage and will be slightly slower than representation types with consecutive values. A representation type can only be registered once; if the same representation type name is registered more than once, the behavior is unde- fined. The function XmRepTypeAddReverse installs a reverse converter for a registered representation type. The reverse converter takes a represen- tation type numerical value and returns the corresponding string value. If the list of numerical values for a representation type contains duplicate values, the reverse converter uses the first name in the value_names list that matches the specified numeric value. For example, if a value_names array has cancel, proceed, and abort, and the corresponding values array contains 0, 1, and 0, the reverse converter will return cancel instead of abort for an input value of 0. rep_type Specifies the representation type name. value_names Specifies a pointer to an array of value names associated with the representation type. A value name is specified in lowercase characters without an Xm prefix. Words within a name are separated with underscores. values Specifies a pointer to an array of values associated with the representation type. A value in this array is associated with the value name in the corresponding position of the value_names array. num_values Specifies the number of entries in the value_names and values arrays. RETURN
Returns the identification number for the specified representation type. RELATED
XmRepTypeAddReverse(3), XmRepTypeGetId(3), XmRepTypeGetNameList(3), XmRepTypeGetRecord(3), XmRepTypeGetRegistered(3), and XmRepTypeValid- Value(3). XmRepTypeRegister(library call)
All times are GMT -4. The time now is 01:48 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy