我一直在試圖找出像Python的拼接這樣的子字符串方法, '你好'[2:4]。在C中切片與Python比較
OLD:指針new
和toret
(返回)是相同的,而是存儲在hello
的時候,它有一個新的地址。有沒有辦法保持地址並打印出來?
NEW:將字符放入緩衝區的最佳方法是什麼?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//char * substr(char *str, int start, int end);
//void substr(char *str, int start, int end);
void get_substr(char *str, int start, int end, char *buffer);
int main() {
char word[] = "Clayton";
char buffer[15];
printf("buffer is now %s",get_substr(word,2,5,buffer);
return 0;
}
void get_substr(char *str, int start, int end, char *buffer) {
int length = end - start;
printf("length %d\n",length);
//char buffer[length]; //init normal array
//assign values from *str
int i;
for (i = 0; i < length; i++) {
buffer[i] = *(str+i+start);
}
}
//char * substr(char *str, int start, int end) {
/* char * substr(char *str, int start, int end) {
int length = end - start;
printf("length %d\n",length);
char buffer[length]; //init normal array
//assign values from *str
int i;
for (i = 0; i < length; i++) {
buffer[i] = *(str+i+start);
printf("i=%d buffer[i]=%c ptr=%c\n",i,buffer[i],*(str+i+start));
}
//add endline if not present
if (buffer[length] != '\0') {
buffer[length] = '\0';
printf("buffer[%d] is %c\n",length,buffer[length]);
printf("0 added\n");
}
printf("buffer %s %p\n",buffer,buffer);
printf("len(buffer) is %d\n",strlen(buffer));
char *toret;
toret = (char*) &buffer;
printf("toret %s %p\n",toret,toret);
return toret;
} */
對不起,這可能是重複的,但我無法找到這個域上的相同例子。 我是新來的C!
不要錯過,但是你的代碼充斥着明顯的錯誤,回答你的問題是完全不可能的。使用'new'作爲變量名稱?返回一個堆棧分配變量的地址?訪問長度爲* n *的0索引數組的索引* n *混淆'sizeof'與字符串的長度? – spectras
@spectras:在C中不鼓勵使用'new'作爲變量名(例如,我不鼓勵它,或者使用任何不是C關鍵字的其他C++關鍵字),但問題是標記爲C,而不是C++,並且C編譯器_must_接受'new'作爲有效的變量名稱。如果不是,它不是C編譯器,但可能是僞裝的C++編譯器。 (這不是聲明代碼是好的 - 它不是!這只是一個觀察結果,'new'是C代碼中通用的有效名稱。) –
@spectras感謝您在查看了一些[strncpy]( http://stackoverflow.com/a/14042078/5645103)s我的代碼似乎現在工作 –