首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的代码会多次打印整个字符串,而不是一次?

为什么我的代码会多次打印整个字符串,而不是一次?
EN

Stack Overflow用户
提问于 2013-04-18 16:02:15
回答 3查看 157关注 0票数 0

我是C语言的新手,在阅读输入和指针时,我在理解一些基本材料时遇到了一些困难。我想使用一个nextChar()函数来读取和打印我在命令行中输入的字符串中的每个字符。我试着输入"hello“,..It会显示”hello“6次。谁能告诉我为什么会这样?我怎么才能修复它?谢谢您抽时间见我!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <assert.h>
char nextChar(char* ptr)
{
    static int i = -1;
    char c;
    ++i;
    c = *(s+i);
    if ( c == '\0' )
        return '\0';
    else
        return c;
}

void display(char* ptr)
{
    assert(ptr != 0);

    do
    {
        printf("%s", ptr);

    } while (nextChar(ptr));
}


int main(int argc, const char * argv[])
{
    char* ptr=argv[1];

    display(ptr);
    return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-18 16:12:18

nextchar函数可以减少:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char nextChar(char* ptr)
{
    static int i = 0;
    i++;
    return (*(ptr+i));
}

并显示到

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void display(char* ptr)
{
    assert(ptr != 0);
    char c = *ptr;

    do
    {
        printf("%c", c);

    } while (c = nextChar(ptr));
}
票数 1
EN

Stack Overflow用户

发布于 2013-04-18 16:04:16

%s格式说明符指示printf打印字符数组,直到它找到空终止符。如果要打印单个char,则应改用%c。如果这样做,还需要使用nextChar的返回值。

或者,更简单地说,您可以将display更改为直接迭代字符串中的字符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void display(char* ptr)
{
    assert(ptr != 0);

    do
    {
        printf("%c", *ptr); // print a single char
        ptr++; // advance ptr by a single char

    } while (*ptr != '\0');
}

或者,等同但不太明显的指针算法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void display(char* ptr)
{
    int index = 0;
    assert(ptr != 0);

    do
    {
        printf("%c", ptr[index]);
        index++;

    } while (ptr[index] != '\0');
}
票数 3
EN

Stack Overflow用户

发布于 2013-04-18 22:57:43

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <assert.h>

char nextChar(const char* ptr){
    static int i = 0;
    char c;

    c = ptr[i++];
    if ( c == '\0' ){
        i = 0;
    }
    return c;
}

void display(const char* ptr){
    char c;
    assert(ptr != 0);

    while(c=nextChar(ptr)){
        printf("%c", c);
    }
}

int main(int argc, const char * argv[]){
    const char* ptr=argv[1];

    display(ptr);
    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16087807

复制
相关文章
为什么我应该使用指针而不是对象本身
对于现代 C++ (尤其是 C++ 11 之后),大量使用 new 动态分配是不明智的选择。
ClearSeve
2022/02/10
1.4K0
我为什么推荐大家使用 Nginx 而不是 Apache?
最后Nginx和Apache的差异总结成一句话就是:“Nginx适合处理静态请求和反向代理,Apache适合处理动态请求”。但这个差异化只有在请求量达到一定的阈值时表现差异才能表现出来,对于 WordPress 、 Typecho 等等这里动态站点来说某一天流量达到这个阈值的时候,还可以部署LNMPA这样的生产环境来应对和解决。所以流量阈值需求不到的时候,选择Nginx是性价比最好的选择了。
明月登楼的博客
2019/05/15
2.5K0
我为什么推荐大家使用 Nginx 而不是 Apache?
为什么我在 Linux 上使用 exa 而不是 ls?
我们生活在一个繁忙的世界里,当我们需要查找文件和数据时,使用 ls 命令可以节省时间和精力。但如果不经过大量调整,默认的 ls 输出并不十分舒心。当有一个 exa 替代方案时,为什么要花时间眯着眼睛看黑白文字呢?
用户1880875
2021/09/06
2K0
一次代码,建立多次
前言 大家可能会有类似这样的需求:同一个APP发布不同的版本,修改里面的主题、icon、applicationId。这应该怎么弄呢?很多同学都是重新check一份工程直接修改的。但其实是不必要的,android studio 的gradle就可以帮我们做到。 1、Build Variants(构建变量) 让我们从一般的概念入手,构建变量。 gradle允许您定义多个构建变量定义的构建变体由一个特定的所有属性生成类型加入到一个特定的所有属性的 product flavors 里面。 Build varia
code_horse
2018/07/02
5690
BI为什么我的查询运行多次?
连接器可以出于各种原因对数据源进行多次调用,包括元数据、结果缓存、分页等。 此行为是正常的,旨在以这种方式工作。
冬夜先生
2022/09/09
5.5K0
小白建站我为什么更推荐使用WordPress而不是typecho?
很多人在选择博客站时总是纠结使用WordPress还是typecho,亦或是像emlog,hexo,zblog等等,大多数大佬都是推荐typecho,一致意见是wp博客臃肿,那么,wp占地大吗?对的。但我还是推荐使用wp建站,下面说说我的看法。
深白鸭
2023/03/12
1.4K0
小白建站我为什么更推荐使用WordPress而不是typecho?
【JS】332- 为什么我更喜欢对象而不是 switch 语句
最近(或者不是最近,这完全取决于您什么时候阅读这边文章),我正在跟我的团队伙伴讨论如何去处理这种需要根据不同的值去处理不同的情况的方法,通常对于这种情况下,人们喜欢使用 switch 语句或者使用很多 if 搭配 else if 条件。在本文中我将重点介绍第三种方式 (我更为喜欢的方法),即使用对象进行快速地查找。
pingan8787
2019/08/29
1.3K0
在应用开发中,我为什么选择 Flutter 而不是 React Native ?
作为一位开发人员,我想在本文中与大家聊聊跨平台开发领域的两大核心选项——Flutter 与 React Native 框架,并介绍我自己为什么更偏爱 Flutter。
逆锋起笔
2021/01/28
3.3K0
为什么 useState 返回的是 array 而不是 object?
这里可以看到 useState 返回的是一个数组,那么为什么是返回数组而不是返回对象呢?我们在自定义 hook 时应该返回什么类型呢?
小鑫
2022/04/26
2.3K0
innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree
链表和数组相比,数组可以通过下标快速定位,或者通过二分查找,查询复杂度为O(logn),而链表只能按照顺序挨个查找,复杂度为O(n)。
大忽悠爱学习
2023/03/23
2.4K0
innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree
面试题46:为什么Redis使用SDS而不是C字符串?
【说明】最后一位遵循C字符串的空字符('\0')结尾的规则,目的是,可以直接使用C字符串的函数。其中len计数不包含‘\0’。
爪哇缪斯
2023/05/09
2710
面试题46:为什么Redis使用SDS而不是C字符串?
为什么建议你用nullptr而不是NULL?
在C语言中,我们常常用NULL作为指针变量的初始值,而在C++中,却不建议你这么做。
编程珠玑
2019/08/28
9.6K0
为什么建议使用你 LocalDateTime ,而不是 Date?
多线程并发如何保证线程安全 - 避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat对象 => 创建和销毁对象的开销大 - 对使用format和parse方法的地方进行加锁 => 线程阻塞性能差 - 使用ThreadLocal保证每个线程最多只创建一次SimpleDateFormat对象 => 较好的方法
芋道源码
2019/10/23
1.6K0
为什么特征工程要用 SQL 而不是 Python
我们常说机器学习是一门实验科学。所以相比较传统工程而言,机器学习分成两个大的阶段:
用户2936994
2022/05/18
8240
为什么特征工程要用 SQL 而不是 Python
JDBC为什么要使用PreparedStatement而不是Statement
前言 这篇博客不是我写的,是由刘志军大大翻译的,真心觉得很棒,而且是必学要掌握的东西,所以就转载过来了,我个人的第一篇转载文章。 开始 PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时Prepar
roobtyan
2018/06/04
1.4K0
JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。下面是一个例子:
哲洛不闹
2018/09/19
1K0
JDBC为什么要使用PreparedStatement而不是Statement
为什么建议使用你LocalDateTime,而不是Date?
在项目开发过程中经常遇到时间处理,但是你真的用对了吗,理解阿里巴巴开发手册中禁用static修饰SimpleDateFormat吗?
良月柒
2019/10/28
1.4K0
为什么建议使用你LocalDateTime,而不是Date?
JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时PreparedStatement还经常会在Java面试被提及,譬如:Statement与PreparedStatement的区别以及如何避免SQL
java达人
2018/01/31
3.7K0
JDBC为什么要使用PreparedStatement而不是Statement
PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。下面是一个例子:
哲洛不闹
2018/09/19
9460
JDBC为什么要使用PreparedStatement而不是Statement
点击加载更多

相似问题

代码会多次保存我的文件,而不是一次

20

为什么只打印一次而不是多次打印?

12

JButton打印多次而不是一次。为什么?

20

数据打印多次而不是一次。

14

嵌套的Object.keys()会多次打印属性,而不是只打印一次

312
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文