D - Array bug?
- MicroWizard (49/49) Mar 11 2004 I have found this problem. (DMD 0.81)
- C. Sauls (7/62) Mar 11 2004 Nope, no array bug, printf() bug. Change your %s specifiers to %.*s and...
I have found this problem. (DMD 0.81) When I run this program with any arguments, it works as I expect. But without arguments, it seems to me, that the length property of array arg can not be queried. An exception is thrown. Is it a bug or am I completely confused? Best regards, Tamás (microwizard ax.hu) --Results----------------------------- C:\Work\DottProp>dmd exctest.d C:\dmd\bin\..\..\dm\bin\link.exe exctest,,,user32+kernel32/noi; C:\Work\DottProp>exctest Debug 1. Debug 2. Error occured: Error: Access Violation C:\Work\DottProp>exctest kuka Debug 1. Debug 2. Debug 3. --exctest.d-------------------------------------------- void main(char[][] arg) { try { printf("Debug 1.\n"); if(!arg) { throw new Error("No args."); } printf("Debug 2.\n"); if(arg.length<2) { throw new Error("Nothing to do."); } printf("Debug 3.\n"); } catch(Error e) { printf("Error occured: %s ... Aborting.\n",e.toString()); } catch(Exception e) { printf("Exception occured: %s ... Aborting.\n",e.toString()); } catch { printf("Unexpected exception occured.\n"); } } --Finish-------------------------------
Mar 11 2004
Nope, no array bug, printf() bug. Change your %s specifiers to %.*s and it works fine. This is because D's strings are of arbitrary length and not null-terminated. Your hint should have been that your "...Aborting" message never showed up in the error report. :) -C. Sauls -Invironz MicroWizard wrote:I have found this problem. (DMD 0.81) When I run this program with any arguments, it works as I expect. But without arguments, it seems to me, that the length property of array arg can not be queried. An exception is thrown. Is it a bug or am I completely confused? Best regards, Tamás (microwizard ax.hu) --Results----------------------------- C:\Work\DottProp>dmd exctest.d C:\dmd\bin\..\..\dm\bin\link.exe exctest,,,user32+kernel32/noi; C:\Work\DottProp>exctest Debug 1. Debug 2. Error occured: Error: Access Violation C:\Work\DottProp>exctest kuka Debug 1. Debug 2. Debug 3. --exctest.d-------------------------------------------- void main(char[][] arg) { try { printf("Debug 1.\n"); if(!arg) { throw new Error("No args."); } printf("Debug 2.\n"); if(arg.length<2) { throw new Error("Nothing to do."); } printf("Debug 3.\n"); } catch(Error e) { printf("Error occured: %s ... Aborting.\n",e.toString()); } catch(Exception e) { printf("Exception occured: %s ... Aborting.\n",e.toString()); } catch { printf("Unexpected exception occured.\n"); } } --Finish-------------------------------
Mar 11 2004