Adding a single char to a char pointer.


 
Thread Tools Search this Thread
Top Forums Programming Adding a single char to a char pointer.
# 1  
Old 12-06-2008
Adding a single char to a char pointer.

Hello,

I'm trying to write a method which will return the extension of a file given the file's name, e.g. test.txt should return txt. I'm using C so am limited to char pointers and arrays. Here is the code as I have it:
Code:
char* getext(char *file)
{
        char *extension;
        int i, j;

        for(i=strlen(file); i>0; i--)
        {
          if(file[i] == '.') {
                for(j=i; j<strlen(file); j++) {
                        strcat(extension, (const char *) file[j]);
                }
                return extension;
          }
        }
        return extension;
}

I know this could return a null pointer but I'm just trying to get it working before I clean it up. I'm getting this compile warning:
Code:
utils.c:106: warning: cast to pointer from integer of different size

Line 106 is the strcat() call. Does somebody have a simple way of adding a single character to a char pointer? I'm not a great C programmer and have never really fully understood the concept of pointers.

Thanks for your help.

Last edited by pallak7; 12-06-2008 at 05:49 PM..
# 2  
Old 12-06-2008
I think your making this harder then it needs to be. Check out the index/rindex() functions.


Code:
char* getext(char *file)
{
   char *extension = NULL;

   extension = rindex(file,'.');
   // check for NULL here

   // use this to remove the dot
   return ++extension;
}

# 3  
Old 12-06-2008
Or something like:

Code:
char* getext(char *file)
{
  int i;

  for(i=strlen(file)-1; i>0; i--)
  {
    if(file[i] == '.') {
        return file+i+1;
    }
  }
  return NULL;
}

Regards
# 4  
Old 12-06-2008
Make sure your files only have one extension with either of these solutions in the event you have files named like

myFile.tar.gz
# 5  
Old 12-06-2008
Quote:
Originally Posted by VRoemer
Make sure your files only have one extension with either of these solutions in the event you have files named like

myFile.tar.gz
my solution would work as it reads from the right.

myFile.tar.gz would return gz
# 6  
Old 12-06-2008
Thanks to everybody for your help. I ended up going with frank_rizzo's suggestion and I now have it working. I didn't even know about the rindex() function so that would probably be why I was trying to make it harder for myself than it had to be.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Segmentation fault when I pass a char pointer to a function in C.

I am passing a char* to the function "reverse" and when I execute it with gdb I get: Program received signal SIGSEGV, Segmentation fault. 0x000000000040083b in reverse (s=0x400b2b "hello") at pointersExample.c:72 72 *q = *p; Attached is the source code. I do not understand why... (9 Replies)
Discussion started by: jose_spain
9 Replies

2. Programming

Invalid conversion from char* to char

Pointers are seeming to get the best of me and I get that error in my program. Here is the code #include <stdio.h> #include <stdlib.h> #include <string.h> #define REPORTHEADING1 " Employee Pay Hours Gross Tax Net\n" #define REPORTHEADING2 " Name ... (1 Reply)
Discussion started by: Plum
1 Replies

3. Shell Programming and Scripting

Single char

Task 2: When Im tring script called char that checks a single character on the command line, c. If the character is a digit, digit is displayed. If the character is an upper or lowercase alphabetic character, letter is displayed. Otherwise, other is displayed. Have the script print an error... (0 Replies)
Discussion started by: Roozo
0 Replies

4. Programming

error: invalid conversion from ‘const char*’ to ‘char*’

Compiling xpp (The X Printing Panel) on SL6 (RHEL6 essentially): xpp.cxx: In constructor ‘printFiles::printFiles(int, char**, int&)’: xpp.cxx:200: error: invalid conversion from ‘const char*’ to ‘char*’ The same error with all c++ constructors - gcc 4.4.4. If anyone can throw any light on... (8 Replies)
Discussion started by: GSO
8 Replies

5. Programming

help with char pointer array in C

i have an array like #define NUM 8 .... new_socket_fd = accept(socket_fd, (struct sockaddr *) &cli_addr, &client_length); char *items = {"one", "two", "three", "four", "five", "six", "seven", "eight"}; char *item_name_length = {"3", "3", "5", "4", "4", "3", "5", "5"}; ... (1 Reply)
Discussion started by: omega666
1 Replies

6. Programming

How to get the sizeof char pointer

The below code throws the error, since the size of x = 19 is not passed to the cstrCopy function. using namespace std; static void cstrCopy(char *x, const char*y); int main () { char x; const string y = "UNIX FORUM"; cstrCopy(x,y.c_str()); return 0; } void cstrCopy(char *x,... (3 Replies)
Discussion started by: SamRoj
3 Replies

7. UNIX for Dummies Questions & Answers

tab char appearing as single space?

I'm trying to run a script which will ssh to several other servers (All Solaris 10) and execute a sar -f command to get each server's CPU usage for a given hour. It kinda works OK but I just can't figure out how to separate the returned fields with a Tab character. I've done lots of searching... (2 Replies)
Discussion started by: jake657
2 Replies

8. UNIX for Dummies Questions & Answers

how2 get single char from keyboard w/o enter

I am writing a bash shell menu and would like to get a char immediately after a key is pressed. This script does not work but should give you an idea of what I am trying to do.... Thanks for the help #! /bin/bash ANSWER="" echo -en "Choose item...\n" until do $ANSWER = $STDIN ... (2 Replies)
Discussion started by: jwzumwalt
2 Replies

9. Shell Programming and Scripting

How to replace any char with newline char.

Hi, How to replace any character in a file with a newline character using sed .. Ex: To replace ',' with newline Input: abcd,efgh,ijkl,mnop Output: abcd efgh ijkl mnop Thnx in advance. Regards, Sasidhar (5 Replies)
Discussion started by: mightysam
5 Replies

10. Programming

Regarding char Pointer

Hi, char *s="yamaha"; cout<<s<<endl; int *p; int i=10; p=&i; cout<<p<<endl; 1) For the 1st "cout" we will get "yamaha" as output. That is we are getting "content of the address" for cout<<s. 2) But for integer "cout<<p" we are getting the "address only". Please clarify how we are... (2 Replies)
Discussion started by: sweta
2 Replies
Login or Register to Ask a Question