2014-03-07 38 views
-1
部分创建一个字符串的

创建局部使用指针在C.使用指针

给定字符串可以说我有以下字符串:

char string[] = "hellomynameisbob"; 

,我想招呼出来的:

接口:

char * partial(int i, int j, char *string){ 
... 
} 

哪里j是我想要我的话,在启动和i是我想让我的话结束的地方。 相当于在Python是:

string = "hellomynameisbob" 
print string[0:5] 

回答

1
char *partial(int a, int b, char *source) { 
    char *buffer = calloc(sizeof(char), strlen(source)+1); //Allocate new buffer 
    strcpy(buffer, source+a); //Copy the string, starting at 'a' 
    buffer[b-a] = 0; //Insert the terminating null character 
    return buffer; //Don't forget to free it! 
} 
0

你可以尝试这样的

 char string[] = "hellomynameisbob"; 

    char buffer[7]; 

    snprintf(buffer,6,"%s", string); 

    printf("buffer: %s\n", buffer); 
+0

我需要AB le保存变量并使用它。它不仅仅用于打印。我试图玩这个和sprintf。但结果不起作用。 – Cripto

+0

@Cripto编辑答案 –

2

partial功能更好地与一个参数指向要复制的部分字符串的缓冲区写入。否则,它将不得不动态分配内存,调用者将不得不释放它,这是令人困惑的。

// buf shall have size at least j - i + 2 
char* partial(int i, int j, const char* string, char* buf) { 
    return strncpy(buf, string + i, j - i + 2); 
} 
0

尝试以下操作:

char * partial(int i, int j, char *str) 
{ 
    char * result = new char[j+1]; 
    snprintf (result, j+1, str + i, sizeof(result)); 
    return result; 
} 


int main() 
{ 
    char * result = partial(0, 5, "hellomynameisbob"); 
    std::cout << "Result=" << result << std::endl; 
    delete result; 
} 

输出将是 “你好”

0
memcpy(buf, string+i, j-i+1); 

难道这里面的部分功能

0
// assuming j is starting point and i is end point 

char * partial(int i, int j, char *string){ 

     char *pstring; 

     pstring = malloc((i-j)*sizeof(char)+1); 

     memcpy(pstring,string+i,(i-j)) 

     pstring[i] = '\0'; 

     return pstring; 
}