需要编写一个函数,它接受一个整数偏移量和大小的字符串,并从offset开始打印,最多偏移+大小字符串

时间:2016-11-10 18:56:24

标签: c pointers

这个想法是从offset的值开始修剪字符串,直到size的值,并返回新的字符串返回1;如果它超出代码boundery只是返回0。 这是我的代码:

int subPrint(char *s, int offset,int size){
    char *m;
    m = (s + offset);
    while(size != 0){
     m = (m + 1);
    if(m == '\0')
        return 0;
    size--;

 }
 s = m;
return 1;

}

void subPrintTest(){
     char s[20] = "INDUSTRIAL";
     subPrint(s,2,4);
     printf("%s",s);
 }

void main(){
     subPrintTest();
     getch();
 }

问题是它打印原始字符串不变

4 个答案:

答案 0 :(得分:0)

您遇到的问题是指针s正在通过值传递给函数subPrint。为了做你想做的事,你可以将指针传递给指针s。

参考:Is passing pointer argument, pass by value in C++?

答案 1 :(得分:0)

您可以保留您拥有的代码并将此行s = m替换为memcpy(destination, src, size_t)您需要包含string.h

答案 2 :(得分:0)

OP subPrint(char *s, int offset,int size)更改了代码中的一些变量,但从不影响s指向的数组,也不会打印任何内容。

subPrint()不需要。使用"%.*s"指定精度字段并限制输出的宽度。

char s[20] = "INDUSTRIAL";
int offset = 2;
assert(offset >= 0 && offset <= strlen(s));
int size = 4;
printf("%.*s", 4, s + 2);

或者只是

int subPrintA(char *s, int offset,int size) {
  while (offset > 0 && *s) {
    offset--;
    s++;
  }
  while (size > 0 && *s) {
    putchar(*s);
    size--;
    s++;
  }
}

答案 3 :(得分:0)

问题是你正在操作其他字符串指针并期望原始字符串受到影响。在subPrint中进行打印,您应该得到所需的结果。

int subPrint(char *s, int offset,int size) {
    char *m;
    m = (s + offset);
    while(size != 0){
     if(*m == '\0')
        return 0;
     putchar(*m); // printing is done here
     m = (m + 1);
     size--;
    }
    return 1;
}

void subPrintTest(){
     char s[20] = "INDUSTRIAL";
     subPrint(s,2,4);
}