2016-05-03 49 views
0

在C語言程序複製的最後一個字符,假設我有不知其長度,像一些輸入字符串:c - 從中​​未知長度的字符串

abcde.xxx abc.xxx abcdefgh.xxx ....

我如何可以從他們的最後4個字符?我想這樣,但它不工作:

char dest[] = "abcdef.ghi"; 
char s[5]; 
memset(s, '\n', sizeof s); 
strncpy(s, dest - 5, 4); 

但是當字符串是空值終止你我不能使用strstr()因爲dest可能是錯誤的像abcd.xxxy

+0

'的memcpy(S,strrchr(DEST),5 '');' – BLUEPIXY

+0

[strlen的](http://www.tutorialspoint.com/c_standard_library/c_function_strlen.htm)給你字符串的長度。然後'strncpy(s,&dest [len-4],4);' – LPs

+0

@BLUEPIXY,會在字符串不包含'。'的情況下崩潰。但這個想法是正確的方向。 – Devolus

回答

3
char s[5] = {0}; 
size_t len = 0; 
char dest[] = "abcdef.ghi"; 
char *p = strchr(dest, '.'); 

if(!p) 
{ 
    // error no '.' 
    return; 
} 

len = strlen(p); 
if(len != sizeof(s)-1) 
{ 
    // More or less than 3 characters plus '.' 
    return; 
} 

strcpy(s, p); 
+0

非常感謝你! Devolus –

1

格式xxxx.xxx使用strlen獲取字符串的長度:

char s[5]; 
size_t len, offset; 
char dest[] = "abcdef.ghi"; 

len = strlen(dest); 
memset(s, '\0', sizeof(char)*5); 
offset = len-4; 
strncpy(s, &dest[offset], 4); 

如果這還沒有結束的字符串數組可以循環的情況下,查看您的點。

之後,您可以使用此索引來計算正確的偏移量。但要小心這個解決方案。如果一個字符串不恨dt並且最後一個空字符,則可能導致訪問衝突。

+1

'offset = len-4-1;' - >'offset = len-4;'strlen不計算空終止符。 – LPs

+0

對,我修好了。 – KimKulling

-1
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
void main() 
{ 
    char dest[] = "abcdef.ghi"; 
    char *p=dest; 
    int len=strlen(dest); 
    clrscr(); 
    printf("%s is of length %d\n",dest,len); 
    p=p+(len-4); 
    for(;*p;printf("%c",*p),p++); 
    getch(); 
} 
+0

如果'len <4',那麼'p = p +(len-4);'是未定義的行爲。 OP確實說過「一些長度未知的輸入字符串」。 – chux

+0

該程序將顯示任意長度輸入的最後四個字符。正如OP所說,「我從他們最後4個字符」。 – Ravi

相關問題