2015-03-25 45 views
-3

的字符串我有以下如何獲得的char *

char* str = "Some string"; 

我怎樣才能得到一個子,從strnm符號?

+1

函數strncpy這個詞。這個問題也是已經存在的一個確切的副本,標記爲重複。 – zubergu 2015-03-25 08:24:55

+0

...並且字符串的第n個字符在'&str [n]'處,假設您從'n'的零開始計數。 – 2015-03-25 08:29:01

+0

@ChintanPatel它如何重要btw? – niyasc 2015-03-25 08:32:19

回答

0

嘗試使用此代碼

char *str = "Some string" 
char temp[100]; 
char *ch1, *ch2; 
ch1 = strchr(str,'m'); 
ch2 = strchr(str,'n'); 
len = ch2-ch1; 
strncpy(temp,ch1,len); 
0
char destStr[30]; 
int j=0; 
for(i=n;i<=m;i++) 
destStr[j++] = str[i]; 

destStr[j] = '\0'; 

只要複製使用循環如上所示的所需的字符。如果您選擇不使用現有的字符串系列函數。

1

正如下面的代碼:

int m = 2, n = 6; 
char *p = (char *)malloc(sizeof(char) * (n - m)); 
for (size_t i = m; i < n; i++) 
{ 
    p[i - m] = str[i]; 
} 
if(p) 
    printf("Memory Allocated at: %x/n",p); 
else 
    printf("Not Enough Memory!/n"); 
free(p); 
0

可以使用strscpn功能。試試這個

int start, end; 
start = strcspn(str, "m"); // start = 2 
end = strcspn(str, "n"); // end = 9 
char *temp = malloc(end-start + 2); // 9 - 2 + 1 (for 'n') + 1(for '\0') 

strncpy(temp, &str[start], end-start + 1); 
temp[end-start + 1] = '\0'; 
1

這是一個演示程序,顯示如何寫入函數。

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

char * substr(const char *s, size_t pos, size_t n) 
{ 
    size_t length = strlen(s); 

    if (!(pos < length)) return NULL; 

    if (length - pos < n) n = length - pos; 

    char *t = malloc((n + 1) * sizeof(char)); 

    if (t) 
    { 
     strncpy(t, s + pos, n); 
     t[n] = '\0'; 
    } 

    return t; 
} 

int main(void) 
{ 
    char* s = "Some string"; 

    char *t = substr(s, 0, strlen(s)); 

    assert(strlen(s) == strlen(t) && strcmp(t, s) == 0); 

    puts(t); 

    free(t); 

    size_t n = 5, m = 10; 

    t = substr(s, n, m - n + 1); 

    assert(strlen(t) == m - n + 1 && strcmp(t, "string") == 0); 

    puts(t); 

    free(t); 

    return 0; 
} 

程序輸出是

Some string 
string