void *的增量类型转换为char *失败

时间:2015-09-11 04:32:43

标签: c pointers void c89 pointer-arithmetic

在这样的函数中:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class NoTextSelectionCaret extends DefaultCaret
{
    public NoTextSelectionCaret(JTextComponent textComponent)
    {
        setBlinkRate( textComponent.getCaret().getBlinkRate() );
        textComponent.setHighlighter( null );
    }

    @Override
    public int getMark()
    {
        return getDot();
    }

    private static void createAndShowUI()
    {
        JTextField textField1 = new JTextField("No Text Selection Allowed");
        textField1.setCaret( new NoTextSelectionCaret( textField1 ) );
        textField1.setEditable(false);

        JTextField textField2 = new JTextField("Text Selection Allowed");

        JFrame frame = new JFrame("No Text Selection Caret");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(textField1, BorderLayout.NORTH);
        frame.add(textField2, BorderLayout.SOUTH);
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

这应该返回传递的字符串文字的第二个字符,因为参数 p 根本无法做到。

为什么会这样?

解决方案总结:

@ M.M: char nextchr (void* p) { ((char*)p)++; return *(((char*)p)); } 需要左值(左手值)才能应用,并且类型广播的结果不是。

@OP更新: 一些编译器(通常/旧的C89 / / 编译器 /喜欢我的)可以允许++ /只要它不作为参数传递给函数/,即使它是非法的并且被证明是C标准是非法的。

0 个答案:

没有答案