C programming + problem with char arrays


 
Thread Tools Search this Thread
Top Forums Programming C programming + problem with char arrays
# 1  
Old 06-27-2008
C programming + problem with char arrays

Im trying to write some code atm which gets the complete pathname of a folder and strips off references to the parent folders. The end result should be just the name of the folder.

Currently Im able to extract the folder name, however Im getting junk added onto the name as well which is making further processing more difficult.

This is how Im doing it

Code:
/*Count number of parent folders*/

for(i=0;str[i];i++)
{
      if((int)str[i] == (int) '/')
                slash_cnt++;
}

/*Extract name of folder*/

for(i=0;str[i];i++)
{
	if((int)str[i] == (int) '/')
	{
                 cnt++;
	    if(cnt == slash_cnt)
	    {
		flag=1;
 		pos = i;
	    }
	}

	if( (flag==1) && (i>pos) && (i<strlen(str)) )
		folder[i-pos-1] = str[i]
}

For folder[] (which is the folder whose name I want) I will get something like "myfolder\023\04" when I just want "myfolder".

Im not sure what I could be doing wrong, so help would be appreciated

cheers

Last edited by JamesGoh; 06-27-2008 at 01:40 AM..
# 2  
Old 06-27-2008
Gday all

Ive managed to get it to work now, however this involved replacing the char * with char[] (I was using char pointers beforehand to contain the full path of the folder).

Also Im aware you can reference pointers as if they were an array, so could the problem I was getting in the firstplace be related to the way I was referencing ?
# 3  
Old 06-27-2008
The posted code snippet doesn't declare whether you are using char * or char [] for the variable in question and which one of 'em is that variable. Another approach is to find the end of the complete pathname and then walk backwards stopping at the first slash that comes across. Name of last folder starts one character to the right of the slash.
# 4  
Old 06-27-2008
Did you take a look at the source of basename?
DragonflyBSD has pretty respectable code to browse via CVSweb.
src/usr.bin/basename/basename.c - view - 1.11
# 5  
Old 06-29-2008
Quote:
Originally Posted by shamrock
The posted code snippet doesn't declare whether you are using char * or char [] for the variable in question and which one of 'em is that variable.
Sorry str[i] is the variable in question and I declared it as a pointer.

The declaration is as follows

Code:
char *str;

/*char array of 1000 bytes ( 1 kb)*/

char cmd[1000];

str = (char *)malloc(sizeof(cmd));


I referenced *str as an array to simplify access to it's value, so sorry for any confusion.
# 6  
Old 07-02-2008
pathnames

I didn't spend much time testing this, but I think it'll work fine.

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
string separator="/"; // use standard path separator unless backwards slashes are discovered
if (argc!=2) {cout<<"USAGE: pathname pathname"<<endl<<"RETURNS: foldername, no parent."<<endl; return -1;}
string pathname; pathname=argv[1];
cout<<"input:"<<pathname<<endl;
size_t lastslash=pathname.find_last_of("/");
size_t lastbslash=pathname.find_last_of("\\");
if ((lastslash!=string::npos)&&(lastbslash!=string::npos)) {cout<<"use either \\ or /, but not both"<<endl; return -1;}
if (lastslash==string::npos) {lastslash=lastbslash;separator="\\";}
if (lastslash==string::npos) {cout<<pathname<<endl; return 0;}
if ((lastslash+1)>=pathname.size()) {cout<<"error"<<endl; return -1;}
size_t parentslash=pathname.find_last_of(separator.c_str(),lastslash-1);
cout<<"output..."<<endl;
if (parentslash==string::npos) {cout<<&pathname[lastslash+1]<<endl; return 0;}
if (parentslash==lastslash) {cout<<pathname<<endl; return 0;}
parentslash++;
cout.write(&pathname[parentslash],lastslash-parentslash);
cout<<endl;
return 0;
}
# 7  
Old 07-18-2008
Just a suggestion, but you might want to look at using the strtok() subroutine. It will provide for you that which is separated by your "/", your directory names, and save lots of iterative coding. Tastes great and much less filling.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Multidimensional arrays Shell Programming and Scripting

I have two files: file-1 is a list of number of interfaces in the switch and file-2 have VLAN-ID , VLAN-NAME , Interface belong to that VLAN like this: file-1: 1/1 1/2 1/3 1/4 1/5 . . file-2: 1,"vlan-wifi",1/1,1/7,1/8 (9 Replies)
Discussion started by: SULTAN01
9 Replies

2. Programming

STL algorithm merge() function to concatenate char arrays

When the STL generic algorithm's merge() function is used to merge two char arrays, the output is not as expected. Below is the program I tried with. #include <iostream> #include <algorithm> #include <cstring> #include <deque> #include <iterator> using namespace std; int main() { ... (3 Replies)
Discussion started by: royalibrahim
3 Replies

3. Programming

problem in multiplying arrays

Hi, this is my code.It's simple : there are 2 2D arrays and the multiplied to C. #include<stdio.h> #include<sys/shm.h> #include<sys/stat.h> #include<stdlib.h> main() { int *A; //A int *B; //B int *C; //C int i,j,x,k,d; int id; ... (17 Replies)
Discussion started by: giampoul
17 Replies

4. Shell Programming and Scripting

Problem with arrays and loop

Hello , im sorry for my english . im trying to create a dynamic menu that will display if the interface is ACTIVE OR STOPPED/FAILED for some reason i cant get it to work properly start_interface_func() { i=0 for interface_chk in 11 71 73 72 12 47 48 49 50 20 23 24 25 46 21 22 27 28... (5 Replies)
Discussion started by: visiown
5 Replies

5. Shell Programming and Scripting

Problem with arrays

Hi I have two arrays: arr1 = (demo demo2 demo3 demo4 demo5) arr2 = (demo2 test demo) I want to check that the values the "arr2" are present in "arr1" Example arr1 = (demo demo2 demo3 demo4 demo5) arr2 = (demo2 test demo) Output: Error arr1 = (demo demo2 demo3 demo4 demo5)... (3 Replies)
Discussion started by: blito_loco
3 Replies

6. Programming

Char arrays

This is in C++. Is there a way to take characters out of input data? For example, hello 0 1 2 3 4 5 is within my double dimensional array: char arr; How would I output only the characters h,e,l,l,o? (0 Replies)
Discussion started by: puttster
0 Replies

7. Programming

char problem ?

Here is a C function that replaces some non-ASCII chars to html decimal entities. It seems that the char "į" does not get replaced correctly but the rest do. Any idea why this is happening ? (Please note that I had to place a space before each ; or they would not post correctly in this forum... (7 Replies)
Discussion started by: cyler
7 Replies

8. UNIX for Dummies Questions & Answers

Problem assigning variables to arrays

Hi All, I have a problem assigning variables to script.I have a script in which i have a while loop now i have to assign some values obtained to an array which will be used later in the script.Can anyone help how to do that. At present my scrot looks like: co=0 pco=0 co=`cat /tmp/highcpu... (4 Replies)
Discussion started by: usha rao
4 Replies

9. Shell Programming and Scripting

Problem with arrays in awk

Hello! I'm trying to make a script that will make a list of the files in a source tree and sort them by size. Problem is I've run into a weird problem. print array will give me numbers like 160, 220, 444 that i don't even know where they come from, and print array will give me the correct numbers... (5 Replies)
Discussion started by: Glauco
5 Replies

10. Programming

char array problem

hello i have a program in C (Unix - SOlaris5.7), and i have the next question: i have a lot of char variable, and i want store their values in a char array. The problem is what i donīt know how to put the char variable's value into the array, and i don`t know how to define the array please... (4 Replies)
Discussion started by: DebianJ
4 Replies
Login or Register to Ask a Question