我一直在试图找出像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我的代码似乎现在工作 –