Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. local string always corrupt
Forum Updated to NodeBB v4.3 + New Features

local string always corrupt

Scheduled Pinned Locked Moved Unsolved General and Desktop
23 Posts 6 Posters 3.3k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • rohit713R rohit713

    I am developing application in mac os mavericks using Qt Creator 3.0.0. having QT 4.8.4 my problem is when i trying to copy QString in char array value of string becomes not accessible.

    for refernce

    #include "mainwindow.h"
    
    #include "ui_mainwindow.h"
    
    #include <QString>
    
    #include <QDebug>
    
    
    MainWindow::MainWindow(QWidget *parent) :
    
        QMainWindow(parent),
    
        ui(new Ui::MainWindow)
    
    {
    
        ui->setupUi(this);
    
    
        abc("risk");
    
    }
    
    
    MainWindow::~MainWindow()
    
    {
    
        delete ui;
    
    }
    
    
    
    void MainWindow::abc(QString ijl)
    
    {
    
        char pr[40];
    
        memset(pr,NULL,40);
    
    
        strcpy(pr,ijl.toLocal8Bit().data());
    
    
        qDebug()<<ijl.toLocal8Bit().data();
    
    
    }
    
    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #3

    @rohit713 said in local string always corrupt:

    value of string becomes not accessible.

    Value of which string? pr?
    Why not

    memset(pr, 0, 40);
    

    ?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    rohit713R 1 Reply Last reply
    2
    • A Offline
      A Offline
      ambershark
      wrote on last edited by
      #4

      This works fine for me, so there is something more going on. You'll have to share some more information. What does the debugger say for the address and the data contained in the array?

      Also how do you know pr is not accessible? You never output it via qdebug or anything else.

      I tried this code (granted I used qt5 since I don't have 4 installed) but it worked fine.

      My L-GPL'd C++ Logger github.com/ambershark-mike/sharklog

      rohit713R 1 Reply Last reply
      4
      • mrjjM mrjj

        Hi
        What is ijl ?
        and can you also show the output ?

        rohit713R Offline
        rohit713R Offline
        rohit713
        wrote on last edited by
        #5

        @mrjj ijl is qstring which is pass as an parameter in function abc ().

        1 Reply Last reply
        0
        • jsulmJ jsulm

          @rohit713 said in local string always corrupt:

          value of string becomes not accessible.

          Value of which string? pr?
          Why not

          memset(pr, 0, 40);
          

          ?

          rohit713R Offline
          rohit713R Offline
          rohit713
          wrote on last edited by
          #6

          @jsulm value of ijl string which is passed in function abc().

          jsulmJ 1 Reply Last reply
          0
          • A ambershark

            This works fine for me, so there is something more going on. You'll have to share some more information. What does the debugger say for the address and the data contained in the array?

            Also how do you know pr is not accessible? You never output it via qdebug or anything else.

            I tried this code (granted I used qt5 since I don't have 4 installed) but it worked fine.

            rohit713R Offline
            rohit713R Offline
            rohit713
            wrote on last edited by rohit713
            #7

            @ambershark yes its work fine in qt 5 but my problem occur in qt 4 .ijl is coruupetd debugger shows the locale value not accesible while we copy this to pr its crash .

            jsulmJ 1 Reply Last reply
            0
            • rohit713R rohit713

              @jsulm value of ijl string which is passed in function abc().

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #8

              @rohit713 But what do you mean by "not accessible"? Was it accessible before strcpy?
              Note this (from http://doc.qt.io/qt-5/qstring.html#toLocal8Bit):
              "The returned byte array is undefined if the string contains characters not supported by the local 8-bit encoding."

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              rohit713R 1 Reply Last reply
              0
              • Christian EhrlicherC Online
                Christian EhrlicherC Online
                Christian Ehrlicher
                Lifetime Qt Champion
                wrote on last edited by
                #9

                You do not check if ijl.toLocal8Bit() is shorter than 40 bytes.

                Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                Visit the Qt Academy at https://academy.qt.io/catalog

                1 Reply Last reply
                2
                • jsulmJ jsulm

                  @rohit713 But what do you mean by "not accessible"? Was it accessible before strcpy?
                  Note this (from http://doc.qt.io/qt-5/qstring.html#toLocal8Bit):
                  "The returned byte array is undefined if the string contains characters not supported by the local 8-bit encoding."

                  rohit713R Offline
                  rohit713R Offline
                  rohit713
                  wrote on last edited by
                  #10

                  @jsulm before strcpy it contain "risk" after calling strcpy it gives not accesible.

                  1 Reply Last reply
                  0
                  • rohit713R rohit713

                    @ambershark yes its work fine in qt 5 but my problem occur in qt 4 .ijl is coruupetd debugger shows the locale value not accesible while we copy this to pr its crash .

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by jsulm
                    #11

                    @rohit713 As @Christian-Ehrlicher said: you implemented a nice example for stack overflow :-)
                    You should use strncpy.

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    aha_1980A rohit713R 2 Replies Last reply
                    1
                    • jsulmJ jsulm

                      @rohit713 As @Christian-Ehrlicher said: you implemented a nice example for stack overflow :-)
                      You should use strncpy.

                      aha_1980A Offline
                      aha_1980A Offline
                      aha_1980
                      Lifetime Qt Champion
                      wrote on last edited by
                      #12

                      @jsulm

                      Even better: qstrncpy ;)

                      Qt has to stay free or it will die.

                      1 Reply Last reply
                      1
                      • jsulmJ jsulm

                        @rohit713 As @Christian-Ehrlicher said: you implemented a nice example for stack overflow :-)
                        You should use strncpy.

                        rohit713R Offline
                        rohit713R Offline
                        rohit713
                        wrote on last edited by
                        #13

                        @jsulm i also tried strncpy but the same problem occurs .

                        jsulmJ 1 Reply Last reply
                        0
                        • rohit713R rohit713

                          @jsulm i also tried strncpy but the same problem occurs .

                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #14

                          @rohit713 Can you show how you used strncpy?

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          rohit713R 2 Replies Last reply
                          0
                          • jsulmJ jsulm

                            @rohit713 Can you show how you used strncpy?

                            rohit713R Offline
                            rohit713R Offline
                            rohit713
                            wrote on last edited by
                            #15
                            This post is deleted!
                            1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @rohit713 Can you show how you used strncpy?

                              rohit713R Offline
                              rohit713R Offline
                              rohit713
                              wrote on last edited by rohit713
                              #16

                              @jsulm strncpy(pr,ijl.toLocal8Bit().data(),ijl.length());

                              jsulmJ aha_1980A 2 Replies Last reply
                              0
                              • rohit713R rohit713

                                @jsulm strncpy(pr,ijl.toLocal8Bit().data(),ijl.length());

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #17

                                @rohit713 This is same stack overflow as before...

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                rohit713R 1 Reply Last reply
                                0
                                • jsulmJ jsulm

                                  @rohit713 This is same stack overflow as before...

                                  rohit713R Offline
                                  rohit713R Offline
                                  rohit713
                                  wrote on last edited by rohit713
                                  #18

                                  @jsulm can u share the stack overflow link

                                  jsulmJ A 2 Replies Last reply
                                  0
                                  • rohit713R rohit713

                                    @jsulm can u share the stack overflow link

                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #19

                                    @rohit713 What link? Think about what will happen if ijl.toLocal8Bit().data() is longer than pr.

                                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    1 Reply Last reply
                                    0
                                    • rohit713R rohit713

                                      @jsulm strncpy(pr,ijl.toLocal8Bit().data(),ijl.length());

                                      aha_1980A Offline
                                      aha_1980A Offline
                                      aha_1980
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #20

                                      @rohit713

                                      Use qstrncpy(pr, ijl.toLocal8Bit().constData(),sizeof(pr));

                                      Qt has to stay free or it will die.

                                      rohit713R 1 Reply Last reply
                                      2
                                      • aha_1980A aha_1980

                                        @rohit713

                                        Use qstrncpy(pr, ijl.toLocal8Bit().constData(),sizeof(pr));

                                        rohit713R Offline
                                        rohit713R Offline
                                        rohit713
                                        wrote on last edited by
                                        #21

                                        @aha_1980 same problem occur with qstrncpy.

                                        jsulmJ 1 Reply Last reply
                                        0
                                        • rohit713R rohit713

                                          @aha_1980 same problem occur with qstrncpy.

                                          jsulmJ Offline
                                          jsulmJ Offline
                                          jsulm
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #22

                                          @rohit713 So, you used exactly this line:

                                          qstrncpy(pr, ijl.toLocal8Bit().constData(),sizeof(pr));
                                          

                                          ?
                                          Use debugger and step by step execution to see what happens.

                                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                                          1 Reply Last reply
                                          2

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved